标签: openal

麦克风的OpenAL实时音频处理

我想编写一个可以实时处理和回放麦克风数据的跨平台应用程序.想象一下,作为一个概念证明,一个聊天室,人们可以互相交谈并对他们的声音应用过滤器.OpenAL适合这个吗?如果没有,有人可以提供替代方案吗?此外,如果任何人都可以提供或链接我一个简单的"hello world"程序,该程序从麦克风读取并将输出吐出,那将是非常棒的.

谢谢!

audio signal-processing real-time microphone openal

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

哪个API可以从ios和osx中的缓冲区播放音频?

我想这样做很简单:从内存播放PCM音频数据.

音频样本将来自声音合成算法,预加载的样本文件或其他任何内容.我的问题是关于如何播放缓冲区,而不是如何填充数据.

所以我在寻找最好的方式来重新实现我老了,过时AudioWrapper(这是基于AudioUnits V1),但我不能在发现苹果的文档,将履行以下的API:

  • 兼容10.5到10.7.
  • 可在ios中使用.
  • 不依赖于第三方库.
  • 是未来的证据(例如:不基于Carbon,64位......).

我正在考虑使用OpenAL,但它真的是最好的选择吗?我看过它的负面看法,它可能过于复杂和过度,可能会增加性能开销?

更糟糕的是,我可以有两个不同的AudioWrapper实现,但如果可能的话,我真的想避免为每个系统安装一个版本(ios,10.5,10.6,10.7 ......).此外,它将在C++中.

编辑:我需要一个良好的延迟,系统必须在20毫秒内响应用户交互(缓冲区必须介于128到512个样本之间,44KHz)

audio macos openal core-audio ios

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

使用OpenAL,设置AL_PITCH和AL_GAIN是否昂贵?

每当我播放音效时,我都会使用:

alSourcei(sources[index], AL_BUFFER, 0);
alSourcei(sources[index], AL_BUFFER, bufferID);
alSourcef(sources[index], AL_PITCH, 1.0);
alSourcef(sources[index], AL_GAIN, 1.0);

每次播放声音效果时,删除设置AL_PITCH和AL_GAIN会是一个重要的优化吗?显然,因为当我初始化声音时,每次我只能设置它一次是1.0.如果没有设置,AL_PITCH和AL_GAIN默认为什么值?

optimization openal

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

适用于iOS音乐游戏的最佳低延迟音频API?OpenAL,Cocoas2d Denshion,PhoneGap

我一直在研究为iOS编写音乐游戏的最佳方法,类似于Tap Tap Revenge,Guitar Hero,Rock Band等.便携性是一个优点.

视频解释了Open AL有一些处理声音,一次播放多个声音和回收内存的好方法.我也遇到了Cocoas2d Denshion以低延迟处理音频.

文章指出,HTML5是可怕的音频播放特别复音.他接着说,Phonegap的Media类运行良好,通过使用本机插件模型,您可以使用Phonegap创建低延迟解决方案

如果你选择一个API,你会选择创建一个低延迟的基于音频的游戏,为什么?如果您的建议与提到的建议不同,请说明以及原因.谢谢.

audio html5 openal ios cordova

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

如何获得当前音频输出设备的当前声级?

我正在寻找一种方法来接入Mac上的当前音频输出,然后返回表示当前声级的值.

声级是指输出产生的噪音量.我不是问如何获得输出设备的当前音量级别.

macos cocoa openal objective-c core-audio

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

如何在openal中播放多个声音?

我正在尝试制作一个可以同时播放7种声音的c ++程序.为此,我有7个由Qt Designer 5.3.1组成的播放按钮,每当我点击一个按钮时,它就会将声音加载到相应的缓冲区.我正在使用OpenAL播放声音.检查声音文件后,如果它是wav文件,我使用以下代码将数据加载到缓冲区:

//now we put our data into the openAL buffer and
    //check for success
    if (ui->groupBox_2->isHidden() == true)  //play button is in the groupbox, so I'm using groupbox.
    {
        alGetError();
        alBufferData(buffer[0], *format, data, *size, *freq);
    }
    else if (ui->groupBox_5->isHidden() == true)
    {
        alGetError();
        alBufferData(buffer[1], *format, data, *size, *freq);
    }
    else if (ui->groupBox_14->isHidden() == true)
    {
        alGetError();
        alBufferData(buffer[2], *format, data, *size, *freq);
    }
    else if (ui->groupBox_23->isHidden() == true)
    {
        alGetError();
        alBufferData(buffer[3], *format, data, *size, *freq);
    }
    else if …
Run Code Online (Sandbox Code Playgroud)

c++ openal openal-soft

5
推荐指数
0
解决办法
358
查看次数

为OpenAL加载.WAV文件

我正在尝试加载.WAV文件以与OpenAL一起播放。我正在跟踪我在互联网上找到的示例,但它的行为很奇怪。这是代码:

struct RIFF_Header {
    char chunkID[4];
    long chunkSize;//size not including chunkSize or chunkID
    char format[4];
};

/*
 * Struct to hold fmt subchunk data for WAVE files.
 */
struct WAVE_Format {
    char subChunkID[4];
    long subChunkSize;
    short audioFormat;
    short numChannels;
    long sampleRate;
    long byteRate;
    short blockAlign;
    short bitsPerSample;
};

/*
* Struct to hold the data of the wave file
*/
struct WAVE_Data {
    char subChunkID[4]; //should contain the word data
    long subChunk2Size; //Stores the size of the data block
}; …
Run Code Online (Sandbox Code Playgroud)

c++ audio openal wav

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

我可以在给定时间仅播放任何缓冲区一次吗?

来自 OpenAL 文档:

基本的 OpenAL 对象是监听器、源和缓冲区。可以有大量的Buffer,其中包含音频数据。每个缓冲区可以附加到一个或多个源

我的问题是,我有一个声音文件,我需要每秒同时播放多次。声音时长2秒。所以会重叠。

我是否需要为此填充多个缓冲区(=内存中声音的多次)?

如果我将一个缓冲区附加到多个源,我是否能够播放声音 10 次(重叠),而内存中只有一份副本?或者我仍然需要在内存中处理该声音的 10 个副本吗?

iphone audio openal

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

alutLoadWAVFile 的替代品

OpenAL 1.1 中不推荐使用以下函数调用,什么是正确的替换?我在谷歌上找到的唯一答案是“编写你自己的函数!!” ;-)

alutLoadWAVFile
alutUnloadWAV
Run Code Online (Sandbox Code Playgroud)

openal

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

如何使用g ++(Ubuntu)编译OpenAL程序?

我试图找到一种方法让OpenAL在我的电脑上工作:

Ubuntu 12.10 (running on 2010 intel i7 Macbook Pro)
Run Code Online (Sandbox Code Playgroud)

我从终端安装了OpenAL库:

$ sudo apt-get install libopenal-dev
Run Code Online (Sandbox Code Playgroud)

一切顺利.现在我尝试创建一个简单的C++程序,其中包含库:

#include <iostream>
#include <AL/alut.h>

using namespace std;

int main(){
    cout << "Hello, world" << endl;
}
Run Code Online (Sandbox Code Playgroud)

无论我怎么努力,我最接近找到如何使用g ++编译它是:

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

这会出现以下错误:

test.cpp:2:21: fatal error: AL/alut.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

关于如何将OpenAL链接到我的项目的任何想法?我花了几个小时在谷歌上,答案似乎不存在.我可能做了一些根本错误的事情,因为我对Linux c ++开发不熟悉.谢谢.

编辑:更改以供参考:

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

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

(后面是正确的做法,我发错了).

c++ linux ubuntu linker openal

4
推荐指数
2
解决办法
6952
查看次数