質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

1073閲覧

OpenAL, 'alcOpenDevice' is deprecated(非推奨)

StormRider0602

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/28 07:46

実現したいこと

OpenALの理解を試みている、プログラミング初心者の学生です。
Xcodeを用いて1秒間440Hzのサイン波を再生したいと思っています。

困っていること

参考にしているコードが少々古いせいか、alから始まる各所において「macOS10.15以降、非推奨」と出てしまい、buildすることができません。現環境ではどのように書き換えれば実装することが可能でしょうか?また、もしよろしければこのようなバージョンの変化に対応するためには、どのように調べればいいのか(何を検索すれば良いのか、どこを見れば良いのか)?ご教授いただけると幸いです。

環境

MacOS 11.4
Xcode 12.5

ソース

C++

1#define _USE_MATH_DDEFINES 2 3#include <OpenAL/al.h> 4#include <OpenAL/alc.h> 5#include <array> 6#include <cmath> 7#include <limits> 8#include <thread> 9 10int main(){ 11 //OpenAlの初期化 12 ALCdevice* device = alcOpenDevice(nullptr); 13 ALCcontext* context = alcCreateContext(device, nullptr); 14 15 //1秒分のサイン波(440Hz)を生成 16 const size_t pcm_freg = 44100; 17 const float key_freg = 440.0; 18 std::array<ALshort,pcm_freg> pcm_data; 19 for(size_t i = 0; i < pcm_data.size(); ++i){ 20 pcm_data[i] = std::sin(key_freg*M_PI*2.0*i/pcm_freg) * std::numeric_limits<ALshort>::max(); 21 } 22 23 //バッファの生成 24 ALuint buffer_id; 25 alGenBuffers(1, &buffer_id); 26 27 //用意したサイン波をバッファにコピー 28 alBufferData(buffer_id,AL_FORMAT_MONO16,&pcm_data[0],pcm_data.size() * sizeof(ALshort),pcm_freg); 29 30 //ソースの生成 31 ALuint source_id; 32 alGenSources(1, &source_id); 33 34 //ソースに再生するバッファを割り当てる 35 alSourcei(source_id, AL_BUFFER, buffer_id); 36 37 //ソースの再生開始 38 alSourcePlay(source_id); 39 40 //1秒待つ 41 std::this_thread::sleep_for(std::chrono::seconds(1)); 42 43 //ソースへのバッファの割り当て解除 44 alSourcei(source_id, AL_BUFFER, 0); 45 46 //ソースの破棄 47 alDeleteSources(1, &source_id); 48 49 //バッファの破棄 50 alDeleteBuffers(1, &buffer_id); 51 52 //OpenALの後始末 53 alcMakeContextCurrent(nullptr); 54 alcDestroyContext(context); 55 alcCloseDevice(device); 56} 57

エラーコード(一例でalで始まる各所に同じエラー)

sound_test.cpp:19:25: warning: 'alcOpenDevice' is deprecated: first deprecated in macOS 10.15 - OpenAL is deprecated in favor of AVAudioEngine [-Wdeprecated-declarations]
ALCdevice* device = alcOpenDevice(nullptr);
^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework/Headers/alc.h:209:38: note: 'alcOpenDevice' has been explicitly marked deprecated here
ALC_API ALCdevice * ALC_APIENTRY alcOpenDevice( const ALCchar *devicename ) OPENAL_DEPRECATED;
^

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/06/28 23:30 編集

OpenAL is deprecated in favor of AVAudioEngine でググったら、いろいろ見つかります https://linustechtips.com/topic/1069629-apple-has-deprecated-openal-in-macos-1015-catalina/ で、なんとなく状況が分かります 今後は、Appleが提供するOpenALは使えなくなるようです (既に使えなくなってるのかも) https://github.com/cocos2d/cocos2d-x/issues/20151 によると、OpenAL-softというものがあるとのこと https://openal-soft.org/ を見ると、Macでも使えるらしい そこで、 OpenAL Soft Mac でググってみます そうしたら見つかる https://shin.hateblo.jp/entry/2013/03/13/030450 に、OpenAL SoftをMacにインストールして、exampleをコンパイルして実行した例があります (「結論」は無視してください) また、HomebrewやMacPortsのページも見つかるので、それらを使えば、公式からソースを落としてcmakeしなくても、Macに簡単にインストールできそうです 以上のようにして、いろいろ検索して見つかったものを参考にしていけば、Appleが提供するのを使わなくても、今後もOpenALをMacで使えるのではないですかね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問