【问题标题】:I just don't get AudioFileReadPackets我只是没有得到 AudioFileReadPackets
【发布时间】:2010-04-10 21:27:04
【问题描述】:

我尝试编写最小的代码块来缩小问题范围。它现在只有几行并且不起作用,这很清楚我对如何使用 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 应该可以工作,对吧?)那么那是什么继续?

任何指导将不胜感激。

谢谢。

【问题讨论】:

    标签: iphone objective-c audio core-audio


    【解决方案1】:

    我认为您的问题在于数据包数量参数。您只是在创建一个指向 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(从未使用过这个)。

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      相关资源
      最近更新 更多