PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

2つ前の記事で、DXライブラリPortable v0.5.5 を使った mp3再生のプログラムソースを公開したので、今回は 解説その(2)です.解説その(1)は、「PSPプログラミング DXライブラリPortable でプログラムの「核」を書く」編です。

前回の要領で、マニュアル(ヘルプ)を開きます.
すると、[メインページ]のタブが開いたところに こう書いてあります.

>説明に(本家互換)とある関数はDXライブラリと挙動がほぼ同じですので、本家の関数リファレンスも参考にしてください.

本家は、Windows版「DXライブラリ」ですよ~
>> DXライブラリ 関数リファレンスページ
   ↑↑ このページに、本家Windows版のDXライブラリ関数の一覧がありますので、ブラウザのお気に入りに登録してください.
あと、ネット環境が必須ですよん(このブログを見てる時点でネット接続してるような?)

まず、PSP版の DXライブラリPortable のサウンド関数を見ます.v0.5.5 に どんなのがあるか調べましょう.

ヘルプから [モジュール]タブ → [サウンド関連]タブ の順に クリックして下さい.
11個の関数がありますね.

まず何を書くか?……… はい、サウンドの初期化関数です.
>int InitSoundMem (void)
  ↑ どうやら、コレらしいと判明
       →つまり、出だしは InitSoundMem (); と記述

次は、初期設定関数を記述します.
>> サウンドハンドルにパンを設定する int SetPanSoundMem (int pan, int handle)
>> サウンドハンドルの音量を変更する int ChangeVolumeSoundMem (int volume, int handle)
>> ループ位置を設定する        int SetLoopPosSoundMem (int looppos_s, int handle)
>> ループ位置を設定する        int SetLoopSamplePosSoundMem (int looppos, int handle)
>> LoadSoundMemの挙動を変更します int SetCreateSoundDataType (int type)
実際は、初期化したときに初期値が代入されるので、必要時以外はいじらなくて良いのです。

「パン」は、音声が出力される位置のこと.
「音量」は、その時のPSPにより異なりますが、[+][-]キーに触らないで音量を設定できるらしいのですが
      安全面を考えて「Middle」くらいの 127 とかで良いかも(後で確認する事にします)
「ループ」は、「繰り返し再生」のこと。初期値は「先頭の位置」の「0」です.
「LoadSoundMemの挙動」は、mp3プレイヤー・アプリはストリーミング再生をする方式なので「DX_SOUNDDATATYPE_FILE」を指定.

ここで、各関数の引数(ひきすう/パラメータ)を見ると「handle」という変数名があります.
「handle」==「ハンドル」です。DXライブラリPortable では、音声を「ハンドル」で管理します.
音声ファイルの指定の時に「ファイル名」を記述し、以降は「ハンドル」で音声を再生したり停止したりループしたりを行ないます.

C言語/C++言語で ファイルを 管理する「fp=fopen("ファイル名","r"); の fp の扱い感覚」で音声が制御できます.
サウンド関連の関数で、「handle」の値が返ってくる関数を調べると……
>> int LoadSoundMem ( const char * filename ) 音楽データを読み込みます(ハンドルを取得)
        ↑ どうやらコレみたいです
関数の名前は自由に書けますので、たまたまこういう名前になっているだけす.
この関数は、ストリーミング再生の時は ファイルの存在チェック と ハンドルの取得 を行なっている様です.
詳しく知りたい方はソースを順に追って調べてください(実際にプログラムを実行しながら追跡するのを、「トレースする」と言います).
プログラミング (コンピュータ) - Wikipedia の記事内でトレースを検索


ループ位置の設定関数が2個(2種類)あり、良く解らないので本家の関数マニュアルで詳しく調べます.
>> DXライブラリ 関数リファレンスページ
ブラウザにて、[CTRL]+[F]で検索窓を開いて「SetLoopSamplePosSoundMem」を放り込むと……

ふむふむ、再開位置を「サンプル数(音声データの先頭位置からのバイト数)」か「ミリ秒単位(1/1000秒単位)」か、好きな方で指定するのだと判明しました.
ここでは、先頭の「0」にしておきます 好きな関数で指定できますね.


ココまでの情報で、mp3ストリーミング再生処理を書いてみると……


    int Sound_handle;  // サウンドのハンドル変数

// まずは 全てのサウンドハンドルを削除します(初期化)
InitSoundMem();

// ストリーミング再生モードに設定します(チョイ読みしながら再生)
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);

// 再生させる音声ファイルを指定します(mp3ファイルを用意してね)
if((Sound_handle = LoadSoundMem("ms0:/MUSIC/a.mp3")) == -1) { // もしエラーが発生したら
goto EXIT; // ラベル EXIT: へ飛びます
}

SetPanSoundMem( 0, Sound_handle ); // パンを中央に設定
ChangeVolumeSoundMem( 127, Sound_handle ); // 音量を「中」==「127」に設定
SetLoopSamplePosSoundMem( 0, Sound_handle ); // ループ再生位置を先頭に設定

サウンド再生関数(); // (仮)
サウンド終了処理(); // (仮)
サウンドハンドル解放関数(); // (仮)

// エラーが発生したら、すぐココに飛んできます
EXIT:;



どうですか? 理解できていますか?
私は DXライブラリPortable の開発者では無いので、マニュアルなどを調べながら書いています.
やりたい処理を規則に従って記述しています. まだ解ってない関数は、赤い文字の様に日本語で処理を書いています.
関数名が分からなくても、やりたい事を書けばいいのがテキストエディタの長所です.
関数の名前は、関数名が判明した時に書き直せば良いのです.
もし、理想の関数が無かったら、存在する関数を組み合わせて作るのが基本です.
楽しくPSPプログラミングしましょう.

if文に goto EXIT; を書いたので、飛び先の「ラベル EXIT:」も必ず記述しておきます.
[必須] C++言語での「ラベルの書き方」を学習しておいて下さい.

記事が長くなったので、今回は ここまでです.
質問とか無いですか?


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(2) DXLibP v0.5.5
PSPプログラミング DXライブラリPortable を使ってみよう(1) mp3再生
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング DXライブラリPortable サウンド関数の解説(2)
PSPプログラミング DXライブラリPortable サウンド関数の解説(3)
PSPプログラミング DXライブラリPortable サウンド関数で「ドドド」
PSPプログラミング DXライブラリPortable サウンド「ドドド」解説

関連記事
スポンサーサイト

[edit]

CM: 6
TB: 0

page top

この記事に対するコメント

最近コメないですが僕のようにみてる人はいますということで^^;

なんかスミマセン;

ケロ #- | URL | 2010/01/22 08:16 * edit *

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

# |  | 2010/01/22 09:43 * edit *

す、すごいです!
ビートマニア、PSPでやりたいと思ってたんですが
作ってたんですねー!
これからも応援してますー

名無しさん #- | URL | 2010/01/22 16:48 * edit *

ケロさんへ

最近、米なかったのでグレそうになってたwww

ちょっと反応があってヨカタ

猫山猫宗 #jjrqi.Ao | URL | 2010/01/23 07:03 * edit *

匿名希望さんへ

だから Homebrew って凄いよねー

正規ゲームではこういうのは実現しませんよ、っと
譜面データ作りって、根気いるよな
スキンにも対応していてウレシスっ!

猫山猫宗 #jjrqi.Ao | URL | 2010/01/23 07:07 * edit *

ネコさんへ

といっても受験という理由からPSPは封印したんですがね^^;


だからほぼ毎日サイトは見ててもあまりコメはしないと思います。

ケロ #- | URL | 2010/01/23 13:01 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/223-945448a3
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-07