我只是没有得到AudioFileReadPackets

时间:2010-04-10 21:27:05

标签: iphone objective-c audio core-audio

我尝试编写最小的代码块来缩小问题范围。它现在只是几行而且它不起作用,这很清楚我对如何使用AudioFileReadPackets有一个基本的误解。我已经在线阅读了文档和其他示例,显然我只是没有得到。你能解释一下吗?

这个块应该做什么:我以前打开过一个文件。我想只读一个数据包 - 文件的第一个 - 然后打印它。但它在AudioFileReadPackets行崩溃了:

    AudioFileID mAudioFile2; 
    AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2);
    UInt32 *audioData2 = (UInt32 *)malloc(sizeof(UInt32) * 1);
    AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, (UInt32*)1, audioData2);
    NSLog(@"first packet:%i",audioData2[0]);

(为清楚起见,我已经删除了所有错误处理。)

这是AFRP线崩溃了。

(我知道第三和第四个参数是有用的,在我的“真实”代码中,我使用它们,但它们不是必需的,对吧?因此在这种情况下NULL应该可以工作,对吧?)那么什么是继续?

非常感谢任何指导。

感谢。

1 个答案:

答案 0 :(得分:4)

我认为你的问题是数据包参数。您只是创建一个指向0x00000001的指针。问题是它试图使用这是实际读取了多少数据包的输出。您的音频缓冲区也可能太小。根据文档,它应该是数据包的长度乘以数据包长度的上限。

试试这个:

AudioFileID mAudioFile2; 
AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2);
UInt32 packetCount = 1;
void *audioData2 = (void *)malloc(packetCount * maxPacketSize);
AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, &packetCount, audioData2);
NSLog(@"first packet:%i",audioData2[0]);

不确定如何获取maxPacketSize(从未使用过这个)。