问题标签 [openal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何使用openAL将实时音频输入从麦克风录制到文件中?(里面有C++代码)
我有这样的代码,用于在 Windows 上使用 openAL 进行麦克风回声。
我想创建一些CapturedAudioData
文件来写入循环期间捕获的所有音频数据。所以它会像未格式化的 PCM。我需要每秒填充 25 次。
如何创建这样的东西 - 我必须更改/添加到我的代码中?
c++ - 哪里可以得到 OpenAl32.Dll,它可以从你的应用程序而不是 system32 的文件夹中运行?
所以我创建了一个应用程序。通常它足以将 ffmpeg 之类的 dll 放在文件夹中,以便在项目创建步骤期间进一步分发应用程序,但这个 OpenAL32.DLL 只是不想像那样为我工作。那么从哪里获得可再发行的 OpenAL32.dll 呢?
iphone - Core Audio / OpenAL 会重新采样音频文件吗?
我注意到,如果我的音频文件是 caf 11250Hz 单声道,它们的性能会比 44.1Khz 单声道差。使用分析器跟踪它,我可以看到对于低采样率文件,最长的跟踪之一以 LinearConverterInt32 结尾。这在 44.1KHz 迹线中不存在。
我想使用较低的采样率文件来降低文件大小(希望是内存大小)。
我注意到在我的日志文件中我得到了这个 AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved
所以我猜这是它要转换的格式,但我不知道如何告诉它使用 1 ch,11250 Hz 16 位。
想法?
iphone - OpenAL 初始化问题,仅限 iPod(?)
我在使用 OpenAL 时遇到了问题,这似乎只发生在 iPod 硬件上,奇怪的是它工作正常,但现在不是。
我正在设置音频会话:
并初始化 OpenAL:
输出是:
所以 alcMakeContextCurrent 函数返回 false,我不知道为什么。音频不是我的专长,我找不到太多关于这方面的信息,所以你们能给我的任何帮助将不胜感激。
谢谢!
编辑:我发现如果我颠倒了初始化的顺序——也就是说,如果我初始化 OpenAL 然后是 AudioSession,它可以工作......虽然这是我之前的顺序并且它没有工作,所以很有趣肯定会继续;此外,它仍然不适用于旧版本的 iOS
c++ - 如何让用户使用 openAL 选择录音设备?
所以我们有类似的东西:
但这里我们只使用默认设备。如何让用户选择一个而不是使用它?
midi - 使用 OpenAL 和 SF2 以编程方式播放 MIDI
我可以从头开始创建一个使用 TiMidity++ 验证的基本 MIDI 文件,并且我知道足够的 OpenAL 来播放文件中的流式源。
我只是想知道是否可以通过读取 SF2 和 MIDI 文件并使用 OpenAL 播放声音来用 C 创建一个程序来播放 MIDI 文件。我需要使用另一个库吗?我想提前知道,因为 SF2 格式看起来很复杂。
iphone - 在 iphone 上实现 OpenAL 时的声音播放延迟(打嗝)
我在我的 iphone 游戏中实现了 OpenAL 代码。当我开始游戏时,它会运行 1 秒并停止 2 秒然后恢复(打嗝效果)。我相信它是由于声音文件加载而延迟的。解决办法是什么?任何人都可以推荐任何书籍、网站或源代码(请不要参考 iPhone)?是否有加载过程,我应该在哪里初始化加载过程?那会有帮助吗?
下面,我已经包含了我已经实现的 OpenAL 代码的相关组件。声音文件将由游戏循环中的“if”语句播放和调用。OpenALController 类用于创建声源和缓冲区,并在OpenALController中调用InitOpenAL方法。MyView 是 UIView 的自定义子类,并连接到主视图(我没有使用默认视图)。
// MyView.m // 一个自定义的 UIView 作为主视图。
#import "OpenALSoundController.h"
- (void)startPlaying{
...
[self initializeValuables];
...
[自初始化定时器];
}
- (void)initializeTimer { if (theTimer == nil) {
theTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector)gameLoop)];
theTimer.frameInterval = 2;
[theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
}
}
- (void)gameLoop { ... If something = true // 播放声音 [[OpenALSoundController sharedSoundController] playSound1];
...
}
...
@end
// OpenALSoundController.h @interface OpenALSoundController : NSObject {
...}
...
+ (OpenALSoundController*) sharedSoundController
...
@end
// OpenALSoundController.m
// 单例访问器
{
static OpenALSoundController* shared_sound_controller;
@synchronized(self)
{
if(nil == shared_sound_controller)
{ shared_sound_controller = [[OpenALSoundController alloc] init];
}
返回 shared_sound_controller;
}
返回 shared_sound_controller;
}
- (void) initOpenAL{
...
file_url = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"fire" ofType:@"wav"]];
firePcmData = MyGetOpenALAudioDataAll((CFURLRef)file_url, &data_size, &al_format,&sample_rate);
alBufferData(fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url 发布];
...
alSourcei(outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}
ios - iOS:音频:读取、处理、写入声音文件所需的代码 + MIDI 处理
我认为我需要做的是创建一些代码,让我可以读取一堆原始声音文件(例如,吉他的完整声音字体),处理这些文件(构建和弦),并将结果作为另一组输出的文件。
我的问题:任何人都可以向我指出一些与此任务接近的代码,这将使我不必从头开始做所有事情吗?
编辑:下面的答案建议我使用我看过的车库乐队。它看起来像一个很棒的工具。我可以在车库乐队上构建我的 24 个和弦。但是我需要将它保存为 MIDI,并编写我自己的代码来处理这个 MIDI 文件,调整单个音符的音量,保存它,然后通过车库乐队录制声音将其反馈回来。任何人都可以指出一些可以让我开始处理midi的代码吗?
山姆
PS如果有任何兴趣,这就是我正在做的事情:
我面临的困难是如何给和弦发声……如果我只为 C 大调和弦做 {C4 E4 G4},为 G 做 {G4 B5 D5} 等等,听起来会很糟糕
钢琴家根本不会像那样从 C 转到 G。发声是一门艺术,因此每个音符都会尝试将最小距离移动到新的分辨率。
而且我看不到任何以与关键无关的方式来描述这一点的公式。
所以我尝试弹奏所有 Cs Es 和 Gs,为“C 大调”创建声音纹理
如果我将所有相应的幅度放在钟形曲线下,每个大调或小调和弦的能量都应该以同一点为中心,所以效果是纹理会发生变化,而不会给人任何明显/粗略的向上/向下移动的印象
这现在有意义吗?任务变成:如何构造24个纹理?
ios - iOS:Pitch Shifting & Piping 从 OpenAL 输出到缓冲区
我最近发现在 iOS 中可以使用 OpenAL 进行音高转换。
我在看 Hollance 的声音银行播放器。它接收分布在整个范围内的 15 个左右的钢琴音符,并通过确定它最接近哪个样本来播放任何音符,并将该样本的音高移动适当的量。这是执行此操作的代码:
你可以看到这条线做了音高转换:
不幸的是,这对于同时演奏一捆音符没有好处,因为它占用了太多的 CPU。它是动态的音调变化。
我想要的是为每个钢琴音符创建一个缓冲区,并使用这种音高转换技术填充这些缓冲区。但我看不到如何让 openAL 将声音播放到缓冲区中,而不是通过扬声器播放出来。
有什么方法可以输出 alSourcePlay(source->sourceId);
进入缓冲区?
如果我不能这样做,我有什么选择?我曾尝试使用 DSPDimension 文章中的 smbPitchShift,但它并没有提供良好的保真度:钢琴音符的起音阶段确实丢失了。我想我可以使用免费版的 Dirac3...(我目前没有钱购买完整版,但我认为免费版允许单声道处理,所以我可以破解它)。还有其他选择吗?
编辑:我已经测试了 Dirac3,它也有同样的问题。它似乎包围了攻击。似乎 OpenAL 的音调转换器以某种方式做了 Dirac3 没有做的事情。
c++ - 从哪里获得静态构建形式的 OpenAL?
在哪里以静态(.lib)构建的形式获得 OpenAL?(我的意思是将我的应用程序编译成 1 个文件,其中包含所有需要的文件)