teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

追記

2016/08/08 16:09

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -165,4 +165,6 @@
165
165
  任意の数の音声データを同時再生させるためには、動的に音声データを追加入力できるような仕組みが必要だと思うのですが、何か良いやりかたがあるのでしょうか?
166
166
  AudioUnitやCoreAudioに詳しい方にお伺いしたいです。
167
167
 
168
- 追記: 質問してからすぐ気がついたのですが、コールバック関数に`UInt32 inBusNumber`という引数があることに気づきました。これで入力ごとに処理を分ければ解決するかもしれません。
168
+ 追記: 質問してからすぐ気がついたのですが、コールバック関数に`UInt32 inBusNumber`という引数があることに気づきました。これで入力ごとに処理を分ければ解決するかもしれません。
169
+
170
+ 追記2: よく見たらグローバル変数を使わなくても`callbackStruct.inputProcRefCon`とコールバック関数の`void *inRefCon`で音データを送れそうですね・・・コールバック関数に関する理解が足りないみたいです。

3

追記

2016/08/08 16:09

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -163,4 +163,6 @@
163
163
  これは「同時に再生させたいデータの数と同じ数だけコールバック関数を定義する必要がある」という理解でいいのでしょうか?
164
164
  だとすると、例えば100個の音声データを同時に再生させたい場合、あらかじめ100個のコールバック関数を書かなければいけないような気がするのですが・・・これはあまりにも非現実的な方法に思えます。
165
165
  任意の数の音声データを同時再生させるためには、動的に音声データを追加入力できるような仕組みが必要だと思うのですが、何か良いやりかたがあるのでしょうか?
166
- AudioUnitやCoreAudioに詳しい方にお伺いしたいです。
166
+ AudioUnitやCoreAudioに詳しい方にお伺いしたいです。
167
+
168
+ 追記: 質問してからすぐ気がついたのですが、コールバック関数に`UInt32 inBusNumber`という引数があることに気づきました。これで入力ごとに処理を分ければ解決するかもしれません。

2

リンクを設定

2016/08/08 14:32

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,8 @@
1
1
  OSX向けのゲームを作っています。
2
2
  ゲーム音の再生にOpenALを利用していたのですが、同時再生できるSourceや一度に生成できるBufferの数に制限があるため、AudioUnitを使うことにしました。
3
3
  以下のサイトなどを参考にしてとりあえず再生まではできたのですが、簡単に同時再生できるようにラッピングしようとしたところで分からない部分が出てきました。
4
- http://d.hatena.ne.jp/shu223/20140506/1399406906
4
+ [http://d.hatena.ne.jp/shu223/20140506/1399406906](http://d.hatena.ne.jp/shu223/20140506/1399406906)
5
- http://qiita.com/MJeeeey/items/b09e65cbded0cc3eb193
5
+ [http://qiita.com/MJeeeey/items/b09e65cbded0cc3eb193](http://qiita.com/MJeeeey/items/b09e65cbded0cc3eb193)
6
6
 
7
7
  以下のコードは音声ファイルを読み込み、メモリ上のデータから再生するだけのものです。(エラー処理が不完全ですが...)
8
8
  ```lang-objectivec
@@ -159,7 +159,7 @@
159
159
  のようにしたいです。(あくまでも例です。)
160
160
 
161
161
  同時再生したい場合、ミキサーユニットを使うとよさそうなことは分かったのですが、以下のサイトによればミキサーの入力1つ1つに対してコールバック関数やフォーマットを設定する必要があります。
162
- http://objective-audio.jp/2009/03/audiounit-multichannelmixer.html
162
+ [http://objective-audio.jp/2009/03/audiounit-multichannelmixer.html](http://objective-audio.jp/2009/03/audiounit-multichannelmixer.html)
163
163
  これは「同時に再生させたいデータの数と同じ数だけコールバック関数を定義する必要がある」という理解でいいのでしょうか?
164
164
  だとすると、例えば100個の音声データを同時に再生させたい場合、あらかじめ100個のコールバック関数を書かなければいけないような気がするのですが・・・これはあまりにも非現実的な方法に思えます。
165
165
  任意の数の音声データを同時再生させるためには、動的に音声データを追加入力できるような仕組みが必要だと思うのですが、何か良いやりかたがあるのでしょうか?

1

追記

2016/08/08 13:11

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -4,7 +4,7 @@
4
4
  http://d.hatena.ne.jp/shu223/20140506/1399406906
5
5
  http://qiita.com/MJeeeey/items/b09e65cbded0cc3eb193
6
6
 
7
- 以下のコードは音声ファイルを読み込み、メモリ上のデータから再生するだけのものです。
7
+ 以下のコードは音声ファイルを読み込み、メモリ上のデータから再生するだけのものです。(エラー処理が不完全ですが...)
8
8
  ```lang-objectivec
9
9
  @import AudioToolbox;
10
10