iPhoneアプリで短い音を連続で鳴らす方法について

このQ&Aのポイント
  • iPhoneアプリで0.1秒毎に音を連続して鳴らす方法に悩んでいます。
  • フリーの音源を使用して音を鳴らす処理を実装しましたが、0.1秒よりも短い時間間隔で連続して鳴らすことができません。
  • 音を短くカットする方法も試しましたが、うまくいきません。効果的な解決策を教えてください。
回答を見る
  • ベストアンサー

短い音を連続で鳴らす(iPhoneアプリ)

いつも勉強させていただいております。 iPhoneアプリを作成する学習をすすめていますが、悩むところがでてきたので相談させて下さい。 悩んでいるのは0.1sec毎に音を鳴らす処理です。 フリーの音源を拾って来てm4aで組み込み、音を鳴らす事には成功しているのですが、一回音を鳴らす処理の負荷が高いのか、再生時間が0.1secより短くても、0.1sec毎にその音を鳴らすことに失敗してしまいます。音を短くカットするのにはitunesを使いました。 処理としては、0.1秒毎にコールする関数の中でその音を鳴らしていますが、3回連続で慣らそうとしても、1回しか鳴りません…。音源が利用できれば一番よいのですが、なんとかして「ピ」という音を出すのを実現したいです。 音を鳴らす以下関数の前後にNSLogを出力して、そのログが3回(0.3sec)全てで出ているにもかかわらず、音がならないということも確認済みです。 AudioServicesPlaySystemSound こういう場合はどのように対処すればよいのか、アドバイスいただける方いらっしゃれば、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.2

>ただ、どうしてSystemSoundIDでは連続再生ができないのかが不明です…。 結論は、単純にそういう機能を付けなかったから。 背景には「一般的なアプリに、連続再生機能は不要」という思想があるからでしょう。 SystemSoundやAVAudioPlayerは、 とにかく簡単に使えるように機能を削り、複雑な動きを隠蔽しているので、 それぞれできないことはたくさんあります。 https://developer.apple.com/jp/devcenter/ios/library/documentation/CoreAudioOverview.pdf

Koh1111
質問者

お礼

onosuke様 ご回答ありがとうございます。背景があるのであろうということで了解しました。 そこらへんも分からないと、今回のように戸惑ってしまいそうですね。教えていただいた資料など、アップルのものを参考にしてこれから開発したいと思います。 ありがとうございました!

その他の回答 (1)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

iPhoneに限った話ではありませんが… 一番簡単なのは、 例えば5秒間処理を続ける場合、 0.1秒毎に音が鳴る5秒の曲を無音状態も含めて作成してください。 さらにiOSでループが必要なら、 AVAudioPlayer Classを使うのが簡単だと Appleの中の人が言っています。 https://www.google.co.jp/search?q=ios+AVAudioPlayer iOSで、もっと楽器を鳴らすように自由な制御を行う場合 OpenALやAudioQueue Classが必要です。 ただし、プログラミングの難易度は格段に上昇します。 https://www.google.co.jp/search?q=ios+audio+queue

Koh1111
質問者

お礼

onosuke様 ご回答ありがとうございます。AVAudioPlayerを使う事で実現することができました。 音を再生する方法は一つだけだと思っていたので盲点でした。 ただ、どうしてSystemSoundIDでは連続再生ができないのかが不明です…。あんまり深く考えても仕方が無いのですが、もしかしたらご存知の方がいらっしゃるかもしれないので、もう少し質問を開かせていただきます。

関連するQ&A

  • 圧電ブザー いい音にしたい

    100円ショップで買ったキッチンタイマ、スイッチを押すたびに「ピ、ピ、ピ」といい音でなります。ところがPICで自分が作ると、音はでるけど、なんかくすんだ音がします。 アナライザーで見てみると、キッチンタイマーはきれいな正弦波が出ているのに、自分のはでこぼこしてます。できたら、きれいな音を出したいんですが、方法ありますか。 ちなみに自分の場合 BSF   PORTB,3 CALL   WAIT BCF   PORTB,3 CALL   WAIT これを150回ほど繰り返すだけのもので、なんの工夫もしてません。

  • ビープ音を連続して鳴らす

    何か時間のかかる処理が終わったとき、ユーザーに処理が終わったことをビープ音で知らせたいと思います。1回だと気付きにくいので3回「ピッピッピッ」と鳴らしたいのですが、Beep を3回記述しても鳴りません。苦し紛れに下記の関数を作って間に合わせているのですが、間隔を1秒とっているのでちょっと間延びした感じです。もっとリズミカルに鳴らしたいのですが、いい方法があったらどなたか教えてください。 -------------------------------------------------------------------- Public Function beep3()   Dim i As Integer   Dim dend As Double   For i = 1 To 3     dend = Timer + 1     Beep     Do       If Timer > dend Then         Exit Do       End If       DoEvents     Loop   Next i End Function

  • ビープ音

    添付ファイルをご覧下さい。 B列、C列、D列には、それぞれ関数が埋め込められています。 A列に、数値を入力することによって●、☆☆、▼▼▼等の 文字が表示するように設定しています。 これら特殊文字が出現した際、「ビープ音」が出る方法を 教えて下さい。 添付ファイルから申し上げますと ビープ音が鳴る場合としては A列に数値「5」、「99」、「15」、「6」、「35」を入力した際 となります。 尚、ビープ音は「ピ、ピ」の2回といたします。 私は、VBAの知識は皆無ですので、具体的にご教授して頂ければ 幸いです。よろしくお願いします。

  • イベント処理時のCPU負荷について

    現在、IPアドレスを監視するプログラムの作成を 検討していまがループで監視すると負荷が大変 大きくなります。 疑問に思ったのですが、例えばUNIXのシステムコール sleep() listen() accept()等はCPUに負荷がかかっていません。 常にあるポートのバッファを監視しているはずですよね。 これらのシステムコールはOSではどういった処理でCPU 負荷の軽減を実現しているのしょうか? 以上、ご教授お願いします。

  • 着信音作成ができないです!

    着信音作成ができないです! 私がやってる手順を説明すると (1)iTunesで音源をWAVに変換 (2)SoundEngine Freeを使い40秒前後にカット (3)携帯動画変換君を使って3gppに変換 なんですが(3)の動作の時Error1とでて出来ません。 iTunesはiPodを持ってるため更新の連絡がきたら常にアップデートしています。 Quick Time Playerもバージョン7.6.6とおそらく最新版かと思います。 3gppにできたら次に着もとを使って設定できるようにしたいんですが、これは携帯動画変換君以外のツールなどを使って変換してやってみましたがフォーマットがわからないのだ。とでたり、着もと化が出来ても携帯側で再生できなかったりします。 ちなみにPCのOSはXP 携帯はdocomoのF-01Bです

  • MP3音源の編集と保存

    CDからの音源をMP3等に変換し、MP3プレーヤーやPC上ではWinAMPで聞いています。 学習用の音源のため、WinAMP上で音質の調整をしたりプラグインを用い再生速度を変更して聞いていますが、通勤時にも聞けるように、MP3プレーヤーにこの変更した音源を持っていきたいと考えています。 WinAMPで調整した音の再保存はできないようなのですが、なにかこれを実現する方法はないでしょうか。 実現したいのは、 ・音源の音質の調整(12バンド程度のイコライザがついていれば理想ですが、なくてもトーン調整ができれば良い) ・再生速度を上げたり下げたりしたい(ピッチは上がらず、再生速度だけ) ・上記の調整したファイルを、MP3プレーヤーで聞けるファイルとして保存できる よろしくお願いします。

  • 固定電話機の着信音をオリジナルのものに変更したいんです!

    現在、SHRAPのUX-Y303CLを使っていますが、 電話着信時のコール音を、 24のCTUメロディーに変えたいのです。 ですが、 SDカードスロットは付いてるが、メロディ取り込み機能はなく、 また、Lモードからのダウンロードもサイト表示に制限があり、 ダウンロードしたとしても音源の種類がわからないので、実現可能か微妙です。 ※Lモードは契約していません  (メーカーとドコモに問い合わせしました) ※ヨドバシカメラとヤマダ電機の店員にも聞きましたが、  国内製品でオリジナル音源を取り込める機種はないそうです。 (1)オリジナル音源の取り込み可能な電話機があるか。  (国内外問わず、録音でも可、その方法) (2)裏技的に無理やり電話機へメロディー転送できるか  (可能な機種、その音源種類と作成・転送方法) ちょっとハードな質問かと思いますが、 どなたか少しでも周辺事情に詳しい方よろしくお願いいたします。

  • 【ローパスフィルターにかけたようなドラムの音、これは何なのか】

    【ローパスフィルターにかけたようなドラムの音、これは何なのか】 音楽を聴いていると時々出会う音です。 ドラムやパーカッションの高周波数がカットされたような音で、 主に細かい音符でツクツクタカタカやってる感じで使われていることが多いようです。 そこで試しに手元のソフトウェア音源にフィルターをかけて鳴らしてみましたが、 想像していたような音には全然なりませんでした。 何らかのエフェクト処理で出している音であることは間違いないと思っているのですが、 どうしたらあの音が出るのか、あの音に名称はあるのか、全く分かりません。 もしお分かりの方がいらっしゃいましたら、 あの音はどのように作られている音なのか、どうすれば作れるのか、 どのような楽器やリズムに使われることが多いのかなども含めてお教え頂けると幸いです。 もちろん、わずかな手がかりだけでも大歓迎です。 今挙げられる実例は以下です。 ・ASIAN KUNG-FU GENERATION「夏の日、残像」(『君繋ファイブエム』所収): 冒頭、2:40-2:50、末尾 ・http://www.nicovideo.jp/watch/sm9275538: 19:52-、(冒頭も?) ・『ARC THE LAD GENERATION オリジナルサウンドトラック』、24「水の神殿」: 冒頭 微妙な例ばかりで申し訳ありません。 これらは全て同じ手法だと思うのですが、違いましたらそうお教えください。 よろしくお願い致します。

  • iPhoneギターアプリ開発が20MB以上に。。

    現在、開発会社にアプリ開発を依頼して制作してもらっています。 アプリは簡単に言いますとPocketGuitarなどに代表される、ギターを模して 演奏する(実際に弦を押すと音が出る。ギターのテクニックも再現できる ものです)ものです。 その中でひとつ問題が出てきておりまして、アプリの容量が開発途中の現段階で すでに25MBあるのでユーザーがダウンロードするにはWifi環境が必要になると。 何がそこまで容量を食っているか確認すると、そのうちギター音源の元ファイル (6弦分の6つのwavファイル)で18MBあり、さらにギター音色変更のために今後も 別音源のwavファイルが追加になるので3G環境でダウンロードできるアプリサイズ 20MB以下は絶対無理との返事でした。 「いや、だったら他のギターアプリはもっと多機能なのに20MB以下にできている のでおかしいのでは?他アプリの検証はしてるんですか?」と食い下がったところ、 「アプリの初回起動時にMP3からPCMへ変換する処理を実装すれば、音源ファイルに MP3を使用出来そうです。難点としては、初回起動時のみ、アプリ起動完了までに 時間がかかる事です。ギター音源も複数用意するので、かなり待たされると思います。」 という回答が来ました。 初回起動と言うのは、インストール後の一回のみです。 さらに 「現時点では、MP3を初回起動時に変換するか、初回起動時にwavファイルを自動 ダウンロードする処理を入れるかの二案が考えられます。後者は色んなアプリで良く 採用されている実装です。(但し、ファイルを置く為のレンタルサーバが必要になりますが。) 今回は、ギター音源を数種類用意する想定の為、後者の方式の場合ダウンロード時間 がかかり過ぎる事が懸念されますので前者をおすすめします」 とのことでした。 あまり詳しいテクニカルなことは理解できておりませんが、上記で書かれていることが 正解なのか、本来はもっと最適な方法があるのに技術的問題等でそれができていない のかが分かっておりません。 どなたか上記について、これ以上の正解が無いのかどうかわかりやすく教えていただけ ませんでしょうか。 よろしくお願いいたします。

    • 締切済み
    • Mac
  • コールバック関数が動きません。【音処理】

    当方、音に関するプログラミングをしています。 その中で、解決できない問題が発生しましたので、ご助言・ご協力頂ければ、と思い質問させていただきます。 尚、ソフトは、Microsoft Visual C++ 2010 Express を使用しております。 言語は、C/C++です。 作成したのは、音を再生する、というだけのプログラムです。 初めに、Win32プロジェクトを使い、一部、次のようにプログラムを作成しました。 ~~~~~~ HWND hWnd=CreateWindow(~) ~~仮の適当なウインドウを作成する~~ ~~~~~ MMRESULT ret = waveOutOpen( ~~音をオープンする処理~~ &m_hWaveOut, uDevID, &m_wfxWaveForm, (DWORD)hWnd, 0, CALLBACK_WINDOW); } ~~~~~ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ~~ 再生に関する処理 ~~ } 音データは大きいので、分割して再生し、一つの分割データが再生し終わると、WndProcが呼ばれて 次の再生データを入れ… というような処理です。 大事なのは、コールバック関数を使っているところです。 このプログラムは無事動きました。 しかし、ここから問題が起きました。 ちゃんとしたGUIを実装する為にWindowsフォームアプリケーション、にてプログラムを作成し直した場合、 なぜかコールバック関数の部分だけが動かなくなってしまうのです。 他の部分は問題なく、動きます。 ウインドウから送られてくるメッセージが「Windowsフォームアプリケーション」の場合だけ 違ったりするのでしょうか? 何かわかる方いらっしゃいましたら、ご助言・ご協力お願いいたします。