标签: openal

使用软件合成器制作实时音频应用程序

我正在研究制作一些使键盘功能像钢琴的软件(例如,用户按下'W'键,扬声器播放D音符).我可能会使用OpenAL.我理解数字音频的基础知识,但是在按键时播放实时音频会带来一些问题我无法解决.

问题在于:假设我有10个音频缓冲区,每个缓冲区都有一秒钟的音频数据.如果我必须在通过扬声器播放之前填充缓冲区,那么我会在播放前一两秒填充缓冲区.这意味着每当用户尝试播放音符时,按下琴键和正在播放的音符之间将有一到两秒的延迟.

你是如何解决这个问题的?你是否只是让缓冲区尽可能小,并尽可能地填充它们?有一些我不知道的伎俩吗?

audio synthesizer latency real-time openal

3
推荐指数
1
解决办法
1771
查看次数

iPhone游戏中的声音效果

我正在为iPhone制作一个opengl游戏.我即将开始为应用添加声音效果.我想知道为此目的最好的框架是什么.

AV基础是我最好的选择吗?我还缺少任何其他人,比如Open AL?

iphone audio openal core-audio

3
推荐指数
1
解决办法
3092
查看次数

同时使用音高弯曲和其他效果在iPhone上播放多个iPod库歌曲

过去两周我一直在这里,这让我发疯.几天前我问过这个问题(提取iPod库原始PCM样本并播放声音效果),虽然答案让我走了一半,但我仍然卡住了.

基本上我想要实现的是从iPod库中加载多首歌曲,以便通过弯音,均衡效果等效果进行播放......

我走了AVPlayer和AVAudioPlayer的路线太简单了.我见过的唯一可以用这些效果播放音频的框架是OpenAL.我尝试了一些客观的c包装器(Finch和ObjectAL)Finch不播放压缩音频,而ObjectAL只会为我转换它,如果我传入一个文件的URL(这是我不能做的,因为我只有一个不兼容的iPod库URL).

一个应用程序的一个例子,我想要美丽的东西是Tap DJ.它可以快速加载来自iPod库的歌曲(与TouchDJ不同,它可以播放各种各样的效果.

任何帮助将非常感激.

iphone audio openal ipod objective-c

3
推荐指数
1
解决办法
1832
查看次数

适用于iOS应用程序的多轨mp3播放

我正在做一个涉及以多轨道格式播放歌曲的应用程序(鼓,人声,吉他,钢琴等......).我不需要对每个音轨进行任何精美的音频处理,我需要做的就是播放,暂停和静音/取消静音.

我一直在使用AVAudioPlayer的多个实例,但在进行设备测试时,我注意到首次播放时曲目的播放效果非常不同步.此外,当我暂停并播放曲目时,它们会继续变得更加不同步.经过一番研究后,我意识到AVAudioplayer只有太多的延迟,不能用于我的应用程序.

在我的应用程序中,我基本上有一个AVAudioPlayers的NSArray,我会循环播放每个或暂停/停止每个,我敢肯定这是导致它在设备上失去同步的原因.

看起来Apple的音频混音器对我来说效果很好,但是当我尝试实现它时,我得到一个我无法弄清楚的EXC_BAD_ACCESS错误.

我知道答案是使用OpenAL或音频单元,但是当我需要做的就是同时播放5个.mp3音轨时,似乎没有必要花几个星期来学习这些.有没有人对如何做到这一点有任何建议?谢谢

openal objective-c core-audio audiounit ios

3
推荐指数
1
解决办法
1709
查看次数

g ++无法链接OpenAL库

我无法编译以下代码

#include <AL/al.h>
#include <AL/alc.h>

#include <iostream>


int checkEnumerationSupport() {

    ALboolean enumeration;

    enumeration = alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT");

    if (enumeration == AL_FALSE) {
        // enumeration not supported
        std::cout << "enumerating devices NOT supported\n";
    } else {
        // enumeration supported
        std::cout << "enumerating devices supported\n";
    };

    return 0;

}


int main() {

    checkEnumerationSupport();

}
Run Code Online (Sandbox Code Playgroud)

使用以下命令.

g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

/tmp/ccEN7YAp.o: In function `checkEnumerationSupport()':
test.cpp:(.text+0x13): undefined reference to `alcIsExtensionPresent'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

实现库没有正确链接,我尝试将g ++行更改为

g++ -L/usr/lib/ test.cpp -o test …
Run Code Online (Sandbox Code Playgroud)

c++ linux g++ openal

3
推荐指数
1
解决办法
1221
查看次数

如何多次跳转到特定偏移量?

想象一下这个功能:

void SoundManager::playSource(ALuint sourceID, float offset)
{
    alSourceStop(sourceID);

    ALint iTotal = 0;
    ALint iCurrent = 0;
    ALint uiBuffer = 0;
    alGetSourcei(sourceID, AL_BUFFER, &uiBuffer);
    alGetBufferi(uiBuffer, AL_SIZE, &iTotal);
    iCurrent = iTotal * offset;

    alSourcei(sourceID, AL_BYTE_OFFSET, iCurrent);
    alSourcePlay(sourceID);
}
Run Code Online (Sandbox Code Playgroud)

想法是调用playSource(x, 0.5f)将跳转到(大致)缓冲区的中途等.

它在我第一次调用时工作正常,但是如果我在同一个源上再次调用它(无论该源是否正在播放),它就会开始播放,好像我用偏移0调用它一样.

有什么想法吗?

audio openal offset

2
推荐指数
1
解决办法
1330
查看次数

iPhone:没有为<AVAudioSessionDelegate>类调用'endInterruption'

我有一个声音管理器类,它实现了AVAudioSessionDelegate协议,即beginInterruption和endInterruption方法.

但是,当我给手机打电话并回到应用程序时,这两种方法都没有被调用,应用程序此后也是静音.这是使用调试器和使用NSLog调用进行测试的.

声音管理器类使用openAL.

-

我的类声明如下:

@interface CMOpenALSoundManager : NSObject <AVAudioPlayerDelegate, AVAudioSessionDelegate> 
Run Code Online (Sandbox Code Playgroud)

并且委托实现如下:

- (void)beginInterruption {
    [self setActivated:NO];
}
- (void)audioPlayerBeginInterruption {
    [self setActivated:NO];
}

- (void)endInterruption {
    [self setActivated:YES];
}
- (void)audioPlayerEndInterruption {
    [self setActivated:YES];
}
Run Code Online (Sandbox Code Playgroud)

其中setActivated:(BOOL)状态包含启动和停止声音管理器的代码.

-

我看不出任何不能调用委托方法的原因 - 也许在我启动声音管理器或设置音频属性等时我忘了做什么?

或者我公然错过了一些更明显的东西:o

任何想法都非常感谢!

iphone audio openal objective-c

2
推荐指数
1
解决办法
1660
查看次数

在Windows上使用C将数据流式传输到声卡

作为大学项目的一部分,我必须做一些信号处理,并希望使用PC声卡输出结果.该软件必须用C语言编写,并且需要与Windows一起使用(最好是7和XP).

我找到了输出.wav和类似文件的代码示例,但我感兴趣的是不断输出数据而不是从文件输出.虽然一些声音API似乎有自己的处理缓冲区的方法,但输出数据可能会以数组形式呈现.

任何建议都会很棒,代码示例甚至是最好的API也是如此.我看过DirectSound和OpenAL,但我仍然不确定如何开始.

c windows signal-processing openal directsound

2
推荐指数
1
解决办法
5983
查看次数

使用XCode 4.1在Mac OS X Lion上找不到OpenAL的AL/al.h.

我在XCode中创建了一个项目并添加了OpenAL框架.当我尝试包含它时,编译器仍然无法找到AL/al.h.

我在哪里添加OpenAL的include目录?

编辑:对不起,我忘了添加:我正在使用C/C++

c++ xcode openal

2
推荐指数
1
解决办法
2992
查看次数

如何在OpenAL中获取具有单个缓冲区的源的长度(持续时间)?

我正在从FMOD迁移到OpenAL,我找不到FSOUND_Sample_GetLength()函数的模拟,它返回样本中的样本长度(它不考虑频率)...我得到OpenAL缓冲区名称来自alutLoadMemoryFromFileImage(),所以我无法以这种方式得到波形数据.

请帮忙!

c++ openal fmod

2
推荐指数
1
解决办法
2423
查看次数