【问题标题】:Objective-c/IOS: Reversing the bytes in NSMutabledataObjective-c/IOS:反转 NSMutabledata 中的字节
【发布时间】:2011-09-09 16:59:55
【问题描述】:

在我的应用程序中,我将音频文件的字节存储在 NSMutableData 中,如下所示:

NSMutableData *data = [NSMutableData dataWithBytes:byteData length:len];

我以后可以使用

播放这个
player = [[AVAudioPlayer alloc] initWithData:data error:&error];

我的问题是什么代码会反转数据对象中的字节,以便在播放时声音是向后的?

非常感谢任何帮助。

顺便说一下,音频的byteData是通过以下方式获取的:

    NSMutableData *wave =[NSMutableData dataWithContentsOfURL:url];

NSUInteger len = [wave length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [wave bytes], len);

【问题讨论】:

  • 如果你想反转音频,你不能只反转数据,除非它是未编码的 8 位/样本单声道,它不会是。
  • 需要知道格式:每个样本有多少字节。
  • 那么采样率是44100.0,格式是wav
  • wav 可以是 8 位或 16 位 PCM。给定文件大小、通道数、采样率和长度(以秒为单位)的小数学应该提供每个样本的位/字节。但更复杂的是,有一个文件格式要 wav,PCM 部分必须确定并且需要反转。最好弄个十六进制编辑器,从 wav 格式的文档中弄明白,一个是:sonicspot.com/guide/wavefiles.html
  • 我的是 16 位 PCM,哇,这对我来说是不可能的(一个新手,你可能知道)。像反转音频播放这样简单的事情应该很容易。

标签: iphone objective-c audio nsmutabledata


【解决方案1】:

DaveSmith122 是对的。您不能只反转字节数据。我使用 CoreAudio 和 AudioUnits 也达到了同样的效果。使用 ExtFileReader C API 将文件读入 lPCM 缓冲区,然后您可以根据需要反转缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多