我正在做类似的事情,如从iPod库中流式传输音频,通过网络或蓝牙发送数据,以及使用音频队列播放.
感谢您提出这个问题和代码.帮助我很多.
我有两个问题.
我应该从一台设备发送到另一台设备?CMSampleBufferRef?AudioBuffer?MDATA?AudioQueueBuffer?包?我不知道.
当应用程序完成播放时,它崩溃了,我收到错误(-12733).我只是想知道如何处理错误而不是让它崩溃.(检查OSState?发生错误时,停止吗?)
错误:无法读取样本数据(-12733)
我对 AudioQueueEnqueueBuffer 的调用失败,OSStatus -66686。我以前从未见过此错误代码,并且在任何地方都找不到有关它的信息。将其转换为 NSError 并打印其描述会得到以下控制台输出:
\n\n错误:错误域=NSOSStatusErrorDomain代码=-66686“操作无法完成\xe2\x80\x99。(OSStatus错误-66686。)”
\n\n这是我所有相关的 AudioQueue 初始化代码:
\n\nAudioQueueRef audioQueue;\nAudioQueueBufferRef aq_buffer[3];\nAudioStreamBasicDescription streamFormat;\nstreamFormat.mSampleRate = 44100;\nstreamFormat.mFormatID = kAudioFormatLinearPCM;\nstreamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;\nstreamFormat.mBitsPerChannel = 16;\nstreamFormat.mChannelsPerFrame = 1;\nstreamFormat.mBytesPerPacket = 2 * streamFormat.mChannelsPerFrame;\nstreamFormat.mBytesPerFrame = 2 * streamFormat.mChannelsPerFrame;\nstreamFormat.mFramesPerPacket = 1;\nstreamFormat.mReserved = 0;\n\nOSStatus err;\nerr = AudioQueueNewOutput(&streamFormat, AudioPlayCallback, self, \n CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);\n\n// Start playback\nerr = AudioQueueStart(audioQueue, NULL);\n\n// Enqueue buffers\nfor (int i = 0; i < 3; i++) {\n err = AudioQueueAllocateBuffer (audioQueue, 1024, &aq_buffer[i]); \n err = AudioQueueEnqueueBuffer (audioQueue, aq_buffer[i], 0, …
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题.我的代码在iOS 5和6上运行良好,但在iOS 7上运行时,我在AudioQueue回调上获得了空缓冲区.
可能的相关代码:
- (void)setUpAudioFormat
{
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mSampleRate = SAMPLE_RATE;//16000.0;
audioFormat.mChannelsPerFrame = CHANNELS;//1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mFramesPerPacket = 1;
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(SInt16);
audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame * audioFormat.mFramesPerPacket;
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger
| kLinearPCMFormatFlagIsPacked;
bufferNumPackets = 2048; // must be power of 2 for FFT!
bufferByteSize = [self byteSizeForNumPackets:bufferNumPackets];
}
- (UInt32)numPacketsForTime:(Float64)seconds
{
return (UInt32) (seconds * audioFormat.mSampleRate / audioFormat.mFramesPerPacket);
}
- (UInt32)byteSizeForNumPackets:(UInt32)numPackets
{
return numPackets * audioFormat.mBytesPerPacket;
}
- (void)setUpRecordQueue
{
NSLog(@"\n+++ setUpRecordQueue");
OSStatus errorStatus = …
Run Code Online (Sandbox Code Playgroud) 我正在用本机 C++ 编写 iOS 录音机,但无法使用 Foundation API。
我需要这样的东西:
recordFilePath =
(CFStringRef)[NSTemporaryDirectory() stringByAppendingPathComponent: @"recordedFile.caf"];
Run Code Online (Sandbox Code Playgroud)
获取iPhone上的可写路径。
太感谢了。
我正在使用文本到语音,启动音频工作正常,但我不能阻止它.这是我如何开始音频:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) {
[[self view] setNeedsDisplay];
[self synthesizeInBackground];
[queue waitUntilAllOperationsAreFinished];
[self setIsSpeaking: false];
[[self view] setNeedsDisplay];
});
Run Code Online (Sandbox Code Playgroud)
synthesizeInBackground
- (void) synthesizeInBackground {
XLog(@"-----------------------------------entered");
queue = [[NSOperationQueue alloc] init];
XLog(@"queue: %@", queue);
operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(synthesize) object:nil];
XLog(@"operation: %@", operation);
[queue addOperation: operation];
}
Run Code Online (Sandbox Code Playgroud)
合成
- (void)synthesize {
XLog(@"-----------------------------------entered");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
callback_userdata userdata;
NSError *error = nil;
self.paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
self.documentsDirectory = [self.paths objectAtIndex:0];
self.path = [self.documentsDirectory stringByAppendingPathComponent:@"readSearchresults.txt"];
IvonaStreamer *streamer …
Run Code Online (Sandbox Code Playgroud) audioqueue ×5
ios ×5
core-audio ×2
audio ×1
audioformat ×1
audiotoolbox ×1
c++ ×1
ios7 ×1
iphone ×1
native ×1
objective-c ×1