ズバリ回答100pt+いるか差し上げます。

iPhoneプログラミングの質問です。

iPodで曲を再生しながら起動するアプリから、
その曲をフェードアウトし、アプリで音を再生し、
それが終わると、フェードインで元々の曲を
再生するコードを教えてください。

iPhoneアプリケーションプログラミングガイド
http://developer.apple.com/jp/iphone/library/documentation/iPhoneAppProgrammingGuide
は見ていますが、そういう解説はなさそうで、
自前でiPodライブラリから再生する方法
なら、なんとかなりそうですが・・・

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2010/01/22 15:04:43
  • 終了:2010/01/25 20:39:47

ベストアンサー

id:cockscomb No.2

cockscomb回答回数23ベストアンサー獲得回数52010/01/23 20:39:09

ポイント100pt

同じような質問がStackOverflowにありました。

http://stackoverflow.com/questions/386111/why-does-ipods-audio-n...

MediaPlayer.frameworkをインポートしてiPodライブラリにアクセスし、一時停止させているようです。

http://developer.apple.com/iphone/library/documentation/MediaPla...

フェードアウトの処理は、おそらく

float volume = [MPMusicPlayerController iPodMusicPlayer].volume;

として最初のボリュームを覚えておいて、NSTimerなどのループを使って

float currentVolume = [MPMusicPlayerController iPodMusicPlayer].volume;
if (currentVolume > 0.1) {
    [MPMusicPlayerController iPodMusicPlayer].volume = currentVolume - 0.1;
} else if (currentVolume != 0) {
    [MPMusicPlayerController iPodMusicPlayer].volume = 0;
}

を繰り返すことで音量を0にして、最終的には

[[MPMusicPlayerController iPodMusicPlayer] pause];
[MPMusicPlayerController iPodMusicPlayer].volume = volume;

として一時停止させます。

そして任意の音声を再生した後、

[MPMusicPlayerController iPodMusicPlayer].volume = 0;
[[MPMusicPlayerController iPodMusicPlayer] play];

として再生を始め、やはりNSTimerなどのループでフェードインさせていきます。

float currentVolume = [MPMusicPlayerController iPodMusicPlayer].volume;
if (currentVolume < (volume - 0.1)) {
    [MPMusicPlayerController iPodMusicPlayer].volume = currentVolume + 0.1;
} else if (currentVolume != volume) {
    [MPMusicPlayerController iPodMusicPlayer].volume = volume;
}

僕自身このあたりの処理に詳しくないためあまり自信がありませんが、解決の一助となれば幸いです。

id:yellowberry

ご回答ありがとうございます。

すぐに試せませんが、かなり有力

(まだObjective-Cに不慣れながらも納得&理解できる)

情報です。

追って、結果をご報告します。

2010/01/25 12:34:37

その他の回答(1件)

id:peach0pit No.1

peach0pit回答回数5ベストアンサー獲得回数02010/01/23 04:09:20

ポイント10pt

http://d.hatena.ne.jp/iphone_dev/20080924/1222254670

こちらにご希望に近いプロジェクトファイルがあるかと思います。

id:yellowberry

ありがとうございます。

情報は、まさに求めていたものですが、

プロジェクトファイルがダウンロード

期限を過ぎていて・・・

説明だけでも、API名や考え方のヒントは

散りばめられていますが、もう少し

詳しい情報が欲しいです。

2010/01/23 14:44:18
id:cockscomb No.2

cockscomb回答回数23ベストアンサー獲得回数52010/01/23 20:39:09ここでベストアンサー

ポイント100pt

同じような質問がStackOverflowにありました。

http://stackoverflow.com/questions/386111/why-does-ipods-audio-n...

MediaPlayer.frameworkをインポートしてiPodライブラリにアクセスし、一時停止させているようです。

http://developer.apple.com/iphone/library/documentation/MediaPla...

フェードアウトの処理は、おそらく

float volume = [MPMusicPlayerController iPodMusicPlayer].volume;

として最初のボリュームを覚えておいて、NSTimerなどのループを使って

float currentVolume = [MPMusicPlayerController iPodMusicPlayer].volume;
if (currentVolume > 0.1) {
    [MPMusicPlayerController iPodMusicPlayer].volume = currentVolume - 0.1;
} else if (currentVolume != 0) {
    [MPMusicPlayerController iPodMusicPlayer].volume = 0;
}

を繰り返すことで音量を0にして、最終的には

[[MPMusicPlayerController iPodMusicPlayer] pause];
[MPMusicPlayerController iPodMusicPlayer].volume = volume;

として一時停止させます。

そして任意の音声を再生した後、

[MPMusicPlayerController iPodMusicPlayer].volume = 0;
[[MPMusicPlayerController iPodMusicPlayer] play];

として再生を始め、やはりNSTimerなどのループでフェードインさせていきます。

float currentVolume = [MPMusicPlayerController iPodMusicPlayer].volume;
if (currentVolume < (volume - 0.1)) {
    [MPMusicPlayerController iPodMusicPlayer].volume = currentVolume + 0.1;
} else if (currentVolume != volume) {
    [MPMusicPlayerController iPodMusicPlayer].volume = volume;
}

僕自身このあたりの処理に詳しくないためあまり自信がありませんが、解決の一助となれば幸いです。

id:yellowberry

ご回答ありがとうございます。

すぐに試せませんが、かなり有力

(まだObjective-Cに不慣れながらも納得&理解できる)

情報です。

追って、結果をご報告します。

2010/01/25 12:34:37

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません