老婆手机有指纹锁从里面打不开打不开么办

ios播放PCM数据
//& MainViewController.h&
//& RawAudioDataPlayer&
//& Created by SamYou on 12-8-18.&
//& Copyright (c) 2012年 SamYou. All rights reserved.&
#import &UIKit/UIKit.h&&
#import &AudioToolbox/AudioToolbox.h&&
#define QUEUE_BUFFER_SIZE 4 //队列缓冲个数&
#define EVERY_READ_LENGTH 1000 //每次从文件读取的长度&
#define MIN_SIZE_PER_FRAME 2000 //每侦最小数据长度&
@interface MainViewController : UIViewController&
&&& AudioStreamBasicDescription audioD///音频参数&
&&& AudioQueueRef audioQ//音频播放队列&
&&& AudioQueueBufferRef audioQueueBuffers[QUEUE_BUFFER_SIZE];//音频缓存&
&&& NSLock *///同步控制&
&&& Byte *pcmDataB//pcm的读文件数据区&
&&& FILE *//pcm源文件&
static void AudioPlayerAQInputCallback(void *input, AudioQueueRef inQ, AudioQueueBufferRef outQB);&
-(void)onbutton1&
-(void)onbutton2&
-(void)initA&
-(void)readPCMAndPlay:(AudioQueueRef)outQ buffer:(AudioQueueBufferRef)outQB;&
-(void)checkUsedQueueBuffer:(AudioQueueBufferRef)&
//& MainViewController.m&
//& RawAudioDataPlayer&
//& Created by SamYou on 12-8-18.&
//& Copyright (c) 2012年 SamYou. All rights reserved.&
#import &MainViewController.h&&
@interface MainViewController ()&
@implementation MainViewController&
#pragma mark -&
#pragma mark life cycle&
- (id)init&
&&& self = [super init];&
&&& if (self) {&
&&&&&&& NSString *filepath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@&audio.raw&];&
&&&&&&& NSLog(@&filepath = );&
&&&&&&& NSFileManager *manager = [NSFileManager defaultManager];&
&&&&&&& NSLog(@&file exist = %d&,[manager fileExistsAtPath:filepath]);&
&&&&&&& NSLog(@&file size = %lld&,[[manager attributesOfItemAtPath:filepath error:nil] fileSize]) ;&
&&&&&&& file& = fopen([filepath UTF8String], &r&);&
&&&&&&& if(file)&
&&&&&&& {&
&&&&&&&&&&& fseek(file, 0, SEEK_SET);&
&&&&&&&&&&& pcmDataBuffer = malloc(EVERY_READ_LENGTH);&
&&&&&&& }&
&&&&&&& else{&
&&&&&&&&&&& NSLog(@&!!!!!!!!!!!!!!!!&);&
&&&&&&& }&
&&&&&&& synlock = [[NSLock alloc] init];&
-(void)loadView&
&&& [super loadView];&
&&& self.view.backgroundColor = [UIColor grayColor];&
&&& UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];&
&&& button1.frame = CGRectMake(10, 10, 300, 50);&
&&& [button1 setTitle:@&button1& forState:UIControlStateNormal];&
&&& [button1 setTitle:@&button1& forState:UIControlStateHighlighted];&
&&& [button1 addTarget:self action:@selector(onbutton1clicked) forControlEvents:UIControlEventTouchUpInside];&
&&& [self.view addSubview:button1];&
&&& UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];&
&&& button2.frame = CGRectMake(10, 70, 300, 50);&
&&& [button2 setTitle:@&button2& forState:UIControlStateNormal];&
&&& [button2 setTitle:@&button2& forState:UIControlStateHighlighted];&
&&& [button2 addTarget:self action:@selector(onbutton2clicked) forControlEvents:UIControlEventTouchUpInside];&
&&& [self.view addSubview:button2];&
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation&
&&& return (interfaceOrientation == UIInterfaceOrientationPortrait);&
-(void)onbutton1clicked&
&&& [self initAudio];&
&&& NSLog(@&onbutton1clicked&);&
&&& AudioQueueStart(audioQueue, NULL);&
&&& for(int i=0;i&QUEUE_BUFFER_SIZE;i++)&
&&&&&&& [self readPCMAndPlay:audioQueue buffer:audioQueueBuffers[i]];&
&&&& audioQueue使用的是驱动回调方式,即通过AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);传入一个buff去播放,播放完buffer区后通过回调通知用户,
&&&& 用户得到通知后再重新初始化buff去播放,周而复始,当然,可以使用多个buff提高效率(测试发现使用单个buff会小卡)
-(void)onbutton2clicked&
&&& NSLog(@&onbutton2clicked&);&
#pragma mark -&
#pragma mark player call back&
&试了下其实可以不用静态函数,但是c写法的函数内是无法调用[self ***]这种格式的写法,所以还是用静态函数通过void *input来获取原类指针
&这个回调存在的意义是为了重用缓冲buffer区,当通过AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);函数放入queue里面的音频文件播放完以后,通过这个函数通知
&调用者,这样可以重新再使用回调传回的AudioQueueBufferRef
static void AudioPlayerAQInputCallback(void *input, AudioQueueRef outQ, AudioQueueBufferRef outQB)&
&&& NSLog(@&AudioPlayerAQInputCallback&);&
&&& MainViewController *mainviewcontroller = (MainViewController *)&
&&& [mainviewcontroller checkUsedQueueBuffer:outQB];&
&&& [mainviewcontroller readPCMAndPlay:outQ buffer:outQB];&
-(void)initAudio&
&&& ///设置音频参数&
&&& audioDescription.mSampleRate = 8000;//采样率&
&&& audioDescription.mFormatID = kAudioFormatLinearPCM;&
&&& audioDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsP&
&&& audioDescription.mChannelsPerFrame = 1;///单声道&
&&& audioDescription.mFramesPerPacket = 1;//每一个packet一侦数据&
&&& audioDescription.mBitsPerChannel = 16;//每个采样点16bit量化&&&&&
&&& audioDescription.mBytesPerFrame = (audioDescription.mBitsPerChannel/8) * audioDescription.mChannelsPerF&
&&& audioDescription.mBytesPerPacket = audioDescription.mBytesPerF&
&&& ///创建一个新的从audioqueue到硬件层的通道&
//& AudioQueueNewOutput(&audioDescription, AudioPlayerAQInputCallback, self, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);///使用当前线程播&
&&& AudioQueueNewOutput(&audioDescription, AudioPlayerAQInputCallback, self, nil, nil, 0, &audioQueue);//使用player的内部线程播&
&&& ////添加buffer区&
&&& for(int i=0;i&QUEUE_BUFFER_SIZE;i++)&
&&&&&&& int result =& AudioQueueAllocateBuffer(audioQueue, MIN_SIZE_PER_FRAME, &audioQueueBuffers[i]);///创建buffer区,MIN_SIZE_PER_FRAME为每一侦所需要的最小的大小,该大小应该比每次往buffer里写的最大的一次还大&
&&&&&&& NSLog(@&AudioQueueAllocateBuffer i = %d,result = %d&,i,result);&
-(void)readPCMAndPlay:(AudioQueueRef)outQ buffer:(AudioQueueBufferRef)outQB&
&&& [synlock lock];&
&&& int readLength = fread(pcmDataBuffer, 1, EVERY_READ_LENGTH, file);//读取文件&
&&& NSLog(@&read raw data size = %d&,readLength);&
&&& outQB-&mAudioDataByteSize = readL&
&&& Byte *audiodata = (Byte *)outQB-&mAudioD&
&&& for(int i=0;i&readLi++)&
&&&&&&& audiodata[i] = pcmDataBuffer[i];&
&&&& 将创建的buffer区添加到audioqueue里播放
&&&& AudioQueueBufferRef用来缓存待播放的数据区,AudioQueueBufferRef有两个比较重要的参数,AudioQueueBufferRef-&mAudioDataByteSize用来指示数据区大小,AudioQueueBufferRef-&mAudioData用来保存数据区
&&& AudioQueueEnqueueBuffer(outQ, outQB, 0, NULL);&
&&& [synlock unlock];&
-(void)checkUsedQueueBuffer:(AudioQueueBufferRef) qbuf&
&&& if(qbuf == audioQueueBuffers[0])&
&&&&&&& NSLog(@&AudioPlayerAQInputCallback,bufferindex = 0&);&
&&& if(qbuf == audioQueueBuffers[1])&
&&&&&&& NSLog(@&AudioPlayerAQInputCallback,bufferindex = 1&);&
&&& if(qbuf == audioQueueBuffers[2])&
&&&&&&& NSLog(@&AudioPlayerAQInputCallback,bufferindex = 2&);&
&&& if(qbuf == audioQueueBuffers[3])&
&&&&&&& NSLog(@&AudioPlayerAQInputCallback,bufferindex = 3&);&
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'&&&&android手机pcm转amr格式示例代码工程
&android手机pcm转amr格式示例代码工程
采用android中自带的libmedia_jni库的amrinputstream类进行转换,转换后的大小只有原来pcm格式的十分之一,亲测可用。对于wave也同样适用,因为wave只是包装了一下pcm的数据。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
移动开发下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
android手机pcm转amr格式示例代码工程
所需积分:2
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
android手机pcm转amr格式示例代码工程
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员

我要回帖

更多关于 手机黑屏打不开怎么办 的文章

 

随机推荐