读入声音文件,添加回声,并写入新的声音文件
Posted
技术标签:
【中文标题】读入声音文件,添加回声,并写入新的声音文件【英文标题】:Read sound file in, add echo, and write new sound file 【发布时间】:2014-03-07 14:33:01 【问题描述】:我正在尝试完成以下工作:
-
将声音文件读入内存
将其分成块并在预定义的偏移量处添加回波(2 个可能的偏移值)。
另存为新文件
我有以下代码将声音文件读入内存:
NSURL *urlToCAF = [NSURL URLWithString:@"simple-drum-beat.caf"];
ExtAudioFileRef caf;
OSStatus status;
status = ExtAudioFileOpenURL((__bridge CFURLRef)urlToCAF, &caf);
if(noErr == status)
// request float format
const UInt32 NumFrames = 1024;
const int ChannelsPerFrame = 1; // Mono, 2 for Stereo
// request float format
AudiostreamBasicDescription clientFormat;
clientFormat.mChannelsPerFrame = ChannelsPerFrame;
clientFormat.mSampleRate = 44100;
clientFormat.mFormatID = kAudioFormatLinearPCM;
clientFormat.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsNonInterleaved; // float
int cmpSize = sizeof(float);
int frameSize = cmpSize*ChannelsPerFrame;
clientFormat.mBitsPerChannel = cmpSize*8;
clientFormat.mBytesPerPacket = frameSize;
clientFormat.mFramesPerPacket = 1;
clientFormat.mBytesPerFrame = frameSize;
status = ExtAudioFileSetProperty(caf, kExtAudioFileProperty_ClientDataFormat, sizeof(clientFormat), &clientFormat);
if(noErr != status) /* handle it */
while(1)
float buf[ChannelsPerFrame*NumFrames];
AudioBuffer ab = ChannelsPerFrame, sizeof(buf), buf ;
AudioBufferList abl;
abl.mNumberBuffers = 1;
abl.mBuffers[0] = ab;
UInt32 ioNumFrames = NumFrames;
status = ExtAudioFileRead(caf, &ioNumFrames, &abl);
if(noErr == status)
// do something here
// later
status = ExtAudioFileDispose(caf);
if(noErr != status) /* hmm */
您能否向我提供必要的代码以将回声添加到每个块中,然后将声音另存为新文件?
我很感激。
【问题讨论】:
【参考方案1】:这接近于“请为我编写代码”
如果您在缓冲区中有声波,则添加回声是微不足道的:
out[k] = in[k] + in[k-30]
保存到文件我很确定您可以通过 Google 找到。试着让你的问题针对一件具体的事情提出。
我建议查看http://theamazingaudioengine.com/——它让生活更轻松!
【讨论】:
以上是关于读入声音文件,添加回声,并写入新的声音文件的主要内容,如果未能解决你的问题,请参考以下文章
NAudio 拆分 wav 文件问题。其他所有音频文件声音失真,而其他音频文件清晰