sort(mMyClassVector.begin(), mMyClassVector.end(),
[](const MyClass & a, const MyClass & b)
{
return a.mProperty > b.mProperty;
});
Run Code Online (Sandbox Code Playgroud)
我想使用lambda函数来排序自定义类来代替绑定实例方法.但是,上面的代码会产生错误:
错误C2564:'const char*':对内置类型的函数式转换只能接受一个参数
它工作得很好boost::bind(&MyApp::myMethod, this, _1, _2)
.
我通过加载文件并通过FileInputStream> BufferedInputStream> DataInputStream方法将字节输入AudioTrack.write()来在我的Android手机上播放WAV.音频播放效果很好,如果是,我可以轻松调整采样率,音量等,性能良好.然而,一首曲目开始播放大约需要两秒钟.我知道AudioTrack有一个不可避免的延迟,但这太荒谬了.我每次播放曲目都会得到:
03-13 14:55:57.100: WARN/AudioTrack(3454): obtainBuffer timed out (is the CPU pegged?) 0x2e9348 user=00000960, server=00000000
03-13 14:55:57.340: WARN/AudioFlinger(72): write blocked for 233 msecs, 9 delayed writes, thread 0xba28
Run Code Online (Sandbox Code Playgroud)
我注意到,每次播放曲目时,延迟的写入次数会增加一次 - 即使是在多个会话中 - 从手机开机之时起.块时间始终为230 - 240ms,考虑到此设备上的最小缓冲区大小为9600(9600/44100),这是有意义的.我在互联网上的无数次搜索中看到了这个消息,但它通常似乎与不播放音频或跳过音频有关.就我而言,这只是一个延迟的开始.
我正在高优先级的线程中运行我的所有代码.这是我正在做的截断但功能正常的版本.这是我的播放类中的线程回调.再次,这是有效的(现在只播放16位,44.1kHz,立体声文件),它只需要永远启动并且每次都有获取缓冲/延迟写入消息.
public void run() {
// Load file
FileInputStream mFileInputStream;
try {
// mFile is instance of custom file class -- this is correct,
// so don't sweat this line
mFileInputStream = new FileInputStream(mFile.path());
} catch (FileNotFoundException e) {
// log
}
BufferedInputStream mBufferedInputStream …
Run Code Online (Sandbox Code Playgroud) 我需要同时运行两个AudioTrack实例.它们必须单独运行,因为我以不同的可变采样率播放它们.我发现如果我在同一个线程中运行它们,它们会"轮流".我在他们自己的线程中运行它们,但音频是口吃.
关于制作两个实例的任何想法都很好吗?如果没有,任何关于将两个短缓冲混合成一个的提示,即使我想以不同的采样率播放它们.