AudioSession实际上和OpenAL一样吗?
我正处于用Java编写小型音乐/节奏游戏的早期阶段(通过Slick框架,它依次使用OpenAL,但这可能与此无关).游戏需要以WAV格式读取(和播放)几个声音文件,但有些文件会抛出[javax.sound.sampled.UnsupportedAudioFileException]异常.
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1102)
at org.newdawn.slick.openal.WaveData.create(WaveData.java:123)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713)
at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683)
at org.newdawn.slick.Sound.<init>(Sound.java:33)
Run Code Online (Sandbox Code Playgroud)
这些文件可以在Winamp或Foobar2000中播放得很好,所以这意味着Java只是不识别文件格式的某些变体.此时我有什么选择?
注意:有问题的文件是用户提供的,所以我不能事先转换它们(使用像audacity这样的东西).任何转换步骤都必须在运行时完成.
我对Linux和Linux上的编程都很陌生.我正在尝试在ubuntu上安装OpenAL SDK ...我最好的猜测是我需要从CVS repo下载OpenAL.我找到了一个教程:http://www.edenwaith.com/products/pige/tutorials/openal.php
但是,当我尝试运行终端命令时,会发生以下情况:
steven@ubuntu:~$ cvs -d:pserver:guest@opensource.creative.com:/usr/local/cvs-repository login
Logging in to :pserver:guest@opensource.creative.com:2401/usr/local/cvs-repository
CVS password:
cvs [login aborted]: connect to opensource.creative.com(124.246.64.74):2401 failed: No route to host
Run Code Online (Sandbox Code Playgroud)
有关如何安装OpenAL SDK的任何提示?
我正在为自己制作的游戏开发音频引擎。但是,当我播放声音片段时,它们通常都可以播放,但会失真和失真。我产生了一个正弦波,应该给出纯正的音调,但是它仍然有这种失真-因此,我认为它在OpenAL端。
问题是,我对OpenAL并没有任何幻想。
首先,我生成48000个正弦波样本
#include <math.h>
#define PI 3.14159265
float amplitude = .5f;
float frequency = 440;
float phase = 0.f;
float time = 0.f;
int sampleRate = 48000;
float dt = 1.0f / sampleRate;
float sineWave[48000];
fox_for(sample, sampleRate) { // standard macro for for loop
float val = amplitude * sin(2 * PI * frequency * time + phase);
sineWave[sample] = val;
time += dt;
}
Run Code Online (Sandbox Code Playgroud)
一切都很好。一堆浮子以[-.5,.5]为正弦波。然后,我执行标准的OpenAL步骤:生成源和缓冲区。将数据绑定到缓冲区,然后将缓冲区绑定到源,然后播放声音。
// Open device and context
if (ALCdevice *device = alcOpenDevice(NULL)) {
if (ALCcontext …Run Code Online (Sandbox Code Playgroud)