我在CrashLanding示例中使用Apple的SoundEngine示例代码来播放多个音频文件.使用CrashLanding附带的示例caf文件一切正常但是当我尝试使用我自己的样本使用afconvert转换为CAF时,我得到的是一个沉默的石头;)
有没有人有afconvert设置会生成一个能够通过OpenAL播放的CAF文件?
有人可以向我解释一下OpenAL如何适应iPhone上的声音架构?
似乎有不同级别的API用于处理声音.较高级别的人很容易理解.
但是我的理解变得模糊不清.有Core Audio,Audio Units,OpenAL.
这些之间的联系是什么?openAL是基础,它取决于Core Audio(其中包含作为其低级对象之一的Audio Units)?
XAL似乎没有记录OpenAL,但我可以运行使用其功能的代码.
有没有人为Android构建OpenAL,或者在系统上找到它的共享库?对于任何类型的游戏来说,这似乎是一个显而易见的需求,但它没有任何资源.似乎Android java声音库无法根据我所知道的进行音高变化,因此似乎需要OpenAL.我知道OpenAL Soft可以构建在ALSA之上,但我不确定是否有人这样做,我相信这需要一个月的时间.
如果在没有OpenAL的Android上进行声音操作的某个地方有一个很好的指导,那也没关系.这只是OpenAL的是那种对游戏厂商的一个标准,它会是不错的端口我千行到这个系统,我有点觉得是NDK之前,我荣登网站到它的点看,发现里面几乎没有系统上的共享库访问.
谢谢..我希望我能在不成为Java专家的情况下实际移植.到目前为止真的不喜欢NDK!
我想在iphone上编写一个简单的音频音序器,但我无法获得准确的时序.最后几天我在iphone上尝试了所有可能的音频技术,从AudioServicesPlaySystemSound和AVAudioPlayer以及OpenAL到AudioQueues.
在我的最后一次尝试中,我尝试了使用openAL的CocosDenshion声音引擎,并允许将声音加载到多个缓冲区中,然后在需要时播放它们.这是基本代码:
在里面:
int channelGroups[1];
channelGroups[0] = 8;
soundEngine = [[CDSoundEngine alloc] init:channelGroups channelGroupTotal:1];
int i=0;
for(NSString *soundName in [NSArray arrayWithObjects:@"base1", @"snare1", @"hihat1", @"dit", @"snare", nil])
{
[soundEngine loadBuffer:i fileName:soundName fileType:@"wav"];
i++;
}
[NSTimer scheduledTimerWithTimeInterval:0.14 target:self selector:@selector(drumLoop:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)
在初始化中,我创建声音引擎,将一些声音加载到不同的缓冲区,然后使用NSTimer建立音序器循环.
音频循环:
- (void)drumLoop:(NSTimer *)timer
{
for(int track=0; track<4; track++)
{
unsigned char note=pattern[track][step];
if(note)
[soundEngine playSound:note-1 channelGroupId:0 pitch:1.0f pan:.5 gain:1.0 loop:NO];
}
if(++step>=16)
step=0;
}
Run Code Online (Sandbox Code Playgroud)
这就是它,它应该工作,但它的时机是不稳定和不稳定的.一旦发生其他事情(在视图中绘制),它就会失去同步.
据我所知,声音引擎和openAL缓冲区已加载(在初始化代码中),然后准备立即启动alSourcePlay(source);
- 所以问题可能出在NSTimer?
现在appstore中有几十个声音序列器应用程序,它们具有准确的计时.当变焦和绘图完成时,Ig"idrum"在180 bpm时具有完美的稳定节拍.所以必须有一个解决方案.
有人有什么想法吗?
在此先感谢您的帮助!
最好的祝福,
Walchy
感谢您的回答.它让我更进一步,但不幸的是没有达到目的.这是我做的:
nextBeat=[[NSDate alloc] initWithTimeIntervalSinceNow:0.1]; …
Run Code Online (Sandbox Code Playgroud) 是否有API允许您定义底层声音硬件允许的最大OpenAL"源"数?
在互联网上搜索,我找到了两条建议:
第二项建议甚至被FreeSL采用.
那么,是否有一个通用的API来定义支持的同时"声音"的数量?
感谢您的时间,
法案
应用程序:两个拥有庞大客户群的Cocos2d通用iOS游戏.
问题:几个月前(2011年)报道开始报道,声音会随机切断,只有部分声音会在应用中播放,有些则不会.此问题只能通过设备重新启动来解决.
重要注意事项和细节:
SAME代码和SAME声音文件播放时间超过一年,没有此类错误报告.我希望我能确定一个日期,但我相信问题始于iOS更新.
这个bug难以复制.我亲眼看过一次,但我再也没有运气了.然而,我们每天会收到1-2封支持相同问题的电子邮件,其中一些是以糟糕的评论形式出现的.如果我不得不从空中拉出一个数字,我猜我们正在考虑1000的发病率.它似乎在iPad上更常见,但我不确定.
重新启动设备是解决问题的唯一方法.重新启动应用程序什么都不做,删除应用程序并重新安装什么都不做,必须关闭电源并重新打开.
几个星期前试图盲目修复我倾倒了Cocos2d声音引擎并将其中一个应用程序切换到ObjectAL(另一个基于openAL的声音引擎),希望它可能已经解决了问题.它没有,同样的问题正在发生.正如您所注意到的,这两者都只是OpenAL的接口.
使用Apple的推荐方法(https://developer.apple.com/library/ios/#codinghowtos/AudioAndVideo/_index.html )将声音文件本身从wav转换为cafs ,尽管我们也使用了-c 1标志来制作他们是单一渠道.
需要明确的是,该bug与通常的声音问题(静音开关,音量)无关.一部分声音继续正常播放,但在设备断电并重新启动之前,它们永远不会再次播放.
如果有人有我的想法,我会非常感谢你的帮助.我在这里试图修复一个我无法重新创建的持久性错误,这似乎是由我无法控制的东西造成的.
正如我在另一个帖子中已经说过的那样,我正在开发一个与音频实时图形编程相关的项目(类似Pure Data,Max/MSP,Reaktor).
我在互联网上做了一天的研究,寻找一个好的(维护的,文档齐全的,高度可移植的)C++库,用于与音频和MIDI的低级交互,但我仍然无法决定一个库.
我正在考虑PortAudio + PortMIDI(PortMedia),但他们缺少文档(特别是PortMIDI),并且没有官方社区,只有邮件列表(我认为论坛社区非常重要!),同样(或最差)的情况RTAudio和RTMidi库.
我也尝试一下:
所以...我的问题是:你有任何实时音频/ MIDI的经验吗?你推荐我哪个图书馆?
谢谢
我从Socket创建AudioInputStream时遇到问题.以下是重要部分:
public class SoundStream extends Thread {
private int port;
private String IP;
private Socket socket;
private SoundObject soundObject;
private OpenAL openAL;
private Source source;
private boolean run = true;
public SoundStream(int port, String IP, SoundObject soundObject) {
this.soundObject = soundObject;
this.port = port;
this.IP = IP;
}
public void run() {
try {
this.socket = new Socket(this.IP, this.port);
this.openAL = new OpenAL();
} catch (Exception e) {
e.printStackTrace();
}
this.mainCycleMethod();
}
private void mainCycleMethod() {
while (run) {
this.soundObject.blockAndWait(); …
Run Code Online (Sandbox Code Playgroud) 我一直在比较C++中提供的各种音频库.我想知道,我有点困难从OpenAL开始.有人可以指出一个示例程序如何使用C++中的OpenAL从麦克风录制.
提前致谢!
我正在尝试为iphone应用程序实现一个低通滤波器,在那里我录制一个声音,然后它会被轻微闷声播放; 就像声音来自另一个房间.
我已经研究了音频录制和操作的不同选项,并且发现它有点令人困惑......数字信号处理根本不是一个强点.我主要研究OpenAL,在EFX库中有一个专门做我需要的过滤器,但是iPhone上没有包含EFX.有没有办法使用OpenAL为iPhone复制这种行为?是否有其他选项,如音频单元可以提供解决方案?
谢谢你的帮助
编辑:
所以在Tom的回答和链接之后,我想出了我认为正确的实现.但是,我根本没有得到消声效果,而只是减少音量.这是我目前的(汇总)代码:
使用AVAudioRecorder和以下设置记录文件:
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
Run Code Online (Sandbox Code Playgroud)
然后我读入文件并使用以下代码对其进行转换:
// Read in the file using AudioFileOpenURL
AudioFileID fileID = [self openAudioFile:filePath];
// find out how big the actual audio data is
UInt32 fileSize = [self audioFileSize:fileID];
// allocate the memory to hold the file
SInt16 * outData = (SInt16 *)malloc(fileSize);
// Read …
Run Code Online (Sandbox Code Playgroud)