小编Ada*_*ark的帖子

使用ExtAudioFileWrite for iOS将音频样本缓冲区写入aac文件

更新:我已经想出来并发布我的解决方案作为我自己的问题的答案(下面)

我正在尝试使用AAC格式的ExtAudioFileWrite将一个简单的音频样本缓冲区写入文件.

我已经使用下面的代码实现了这一点,将单声道缓冲区写入.wav文件 - 但是,我无法为立体声或AAC文件执行此操作,这是我想要做的.

这是我到目前为止所拥有的......

CFStringRef fPath;
fPath = CFStringCreateWithCString(kCFAllocatorDefault,
                                  "/path/to/my/audiofile/audiofile.wav",
                                  kCFStringEncodingMacRoman);


OSStatus err;

int mChannels = 1;
UInt32 totalFramesInFile = 100000;

Float32 *outputBuffer = (Float32 *)malloc(sizeof(Float32) * (totalFramesInFile*mChannels)); 


////////////// Set up Audio Buffer List ////////////

AudioBufferList outputData; 
outputData.mNumberBuffers = 1;
outputData.mBuffers[0].mNumberChannels = mChannels; 
outputData.mBuffers[0].mDataByteSize = 4 * totalFramesInFile * mChannels;
outputData.mBuffers[0].mData = outputBuffer;

Float32 audioFile[totalFramesInFile*mChannels];


for (int i = 0;i < totalFramesInFile*mChannels;i++)
{
    audioFile[i] = ((Float32)(rand() % 100))/100.0;
    audioFile[i] = audioFile[i]*0.2;
}

outputData.mBuffers[0].mData = &audioFile;


CFURLRef fileURL = …
Run Code Online (Sandbox Code Playgroud)

c++ iphone objective-c extaudiofile ios

5
推荐指数
1
解决办法
6901
查看次数

std::atomic 与非原子变量的性能如何?

我很好奇在应用程序中使用std::atomic<float>vs 正常的性能float。我也很好奇是什么影响了这个。我经常看到有关原子与互斥锁性能的主题,但我发现很难找到有关原子与非原子的信息。

我不是用它来选择使我的代码线程安全与否,只是想了解所涉及的开销。

(编辑:在原始问题的这一点上,我给出了一个示例(见下文),该示例应该说明实现的更改,而不是询问有关该代码的具体问题。这似乎让人们对我问的问题感到困惑我已经拿出来了。)

我基本上想知道影响 std::atomic 性能的广泛因素是什么。是平台吗?它们的使用方式?使用由两个线程访问大致相同数量的原子,而不是一个线程在 95% 的时间内访问它们而另一个线程仅偶尔访问它们是否更慢?

另外,在这方面astd::atomic<int>和a之间有什么区别std::atomic<float>吗?

提前致谢,

亚当


来自原始问题的示例:

基本上,我尝试制作一百万个浮点数并向它们写入值 200 次。这对我来说花了 0.87 秒。一旦我将它们更改为std::atomic<float>,这大约需要 2.5 秒。所以这意味着它的使用成本大约是 3 倍std::atomic<float>

我试过这个,但为了读取值而不是写入,发现这是一个正常的float并且std::atomic<float>花费相同的时间。

但这是否受到其他因素的影响?如果另一个线程正在写入/读取我的原子,这是否会减慢其他对同一变量的读取/写入速度?大概是这样,但我怎样才能更好地理解这一点?

c++ performance multithreading atomic thread-safety

4
推荐指数
1
解决办法
5483
查看次数