このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com ロゴ
作成 July 4, 2022、追記 July 20, 2022
トップページ > Android 開発トップ > Android Studio で効果音を鳴らす
line
Android 開発
line

ここでは、Android Studio で効果音を鳴らすためのコードについて、書いています。

Canvas だけでもアプリはできる!

ノート PC に、Visual Studio Community 2022 の C++ によるモバイル開発機能のインストールと、 その時点で最新だった Android Studio のインストールを完了しましたので、 Android アプリの開発環境が整ったということになりました。

Android Studio で文字を自由に描画する」 で、独自のビューを作成して Empty Activity に設定し文字を描画、 続く「Android Studio で画像を自由に描画する」 で、PNG 画像をプロジェクトに取り込んで、描画関数 onDraw が引数で受け取った Canvas画像を描画しました。 拡大・縮小もできていますし、画面タッチの検出もできました。

前回「Android Studio でタイマーによる自動画面更新」ではタイマーをセットし、 一定間隔で独自に作成したビューを無効化して、ユーザーの操作がなくても画面を更新できるようにしました。

ここではクイズで正解したときなどに鳴らす、短い効果音の再生処理を実装します。 BGM として鳴っている長い音楽などは考慮していませんので、ご注意ください。

Android Studio で文字を自由に描画する」と 「Android Studio で画像を自由に描画する」、 「Android Studio でタイマーによる自動画面更新」 で作成したコードへの追記の形となっていますが、単独で実装を試みていただいても問題ありません。

過去すでに Android Studio を別のマシンで使用して 「素因数分解トレーニングアプリ」 を開発していますが、改めてちゃんとアプリを作りたいな、と思い、リスタートしています。

なお、使用している Android Studio は、2022 年 5 月中旬にインストールした、2021.2.1 Patch 1 の Chipmunk です。

android studio chipmunk

▼ セクション一覧

音声データを準備する
SoundPool で音を鳴らす
mp3 データを使ってみる
次は・・・ - July 20, 2022

なお、本サイトの ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。

音声データを準備する

投稿 July 4, 2022

何より最初に、再生したい音楽データ(といっても効果音程度の長さを想定していますので、ここでは「音声データ」と呼んでいます)を用意します。 「音声データ」は、あらかじめファイルとして用意されているものとします。 ここでは、correct.wav という名前の wav ファイル ( 高圧縮な mp3 でも大丈夫かとは思いますので、あとで試しています。 ) を例に操作します。

まずはプロジェクトに音声データ・リソースを追加します。

用意した correct.wav という名前の音声データ・ファイルは、長さ 1 秒未満で 162 KB のものです。 ファイルサイズを気にするなら mp3 のほうが有利ですので、このあと 「mp3 データを使ってみる」で試しています。 ひとまず今は、とにかく音が鳴るまで、詳細を深追いしません。

音声データは、リソース res の raw フォルダに入れることになっているようですが、 最初はフォルダが作成されていません。 raw フォルダがすでにある場合は、 raw フォルダ作成の部分は飛ばしていただいて構いません。


では、raw フォルダがない場合です。

画面左側、res を右クリックし、表示されたポップアップメニューの New を選択します。 なお、そもそも画面左側にこのような表示がない場合は、左端にある縦長の「Project」をクリックすると、表示されます。

res - new

続けて、FolderRaw Resources Folder と選択します。

Raw Resource Folder

すると、New Android Component という画面が表示されました。

New Android Component

書かれている説明としては、 「Creates a folder for resources」までが「リソース用のフォルダを作成します」、 それがどんなフォルダかと言えば、 「included in the APK in their raw form」ですので「APK にそのままの形で取り込まれる」です。

APK とは、アプリが最終的にまとめられるファイルのことで、拡張子が .apk となります。 実際には zip 圧縮されたフォルダですので、「圧縮されずに」という意味になるでしょうか? raw とは「生の」ですから、「そのままの」form「形で」です。

Change Folder Location」のチェックボックスが何を意味するかわかりませんが、 きっとデフォルトのままが最適で、何らかの理由がある場合のみ、別の場所を指定するのでしょう。

試しにチェックを入れてみると、パス指定が表示されます。 src/main/raw/ が最初から入っていますから、チェックをいれないとここになるのでしょう。

New Android Component

チェックを入れないで(チェックを入れた場合は外して、フォルダ位置を変更しないで)、画面右下の「Finish」ボタンをクリックします。

raw

すると、res の中に raw フォルダができました。 同時に「Gradle project sync in progres...」となり、数分、激しい処理が行われました。 Gradle というものの「同期」処理をしていたようです。 raw フォルダを追加したからか、たまたまそのタイミングになったのかは、わかりません。


Resource Manager

画面左端の「Resource Manager」をクリックして、リソース・マネージャーを開きます。 いま作成した raw があるようには見えませんので、右端の縦 3 点メニューを開いてみましたが、raw っぽいものはありません。

Project

追加方法が見つかりませんでしたので、画面左端の「Project」をクリックしてプロジェクト表示にし、 エクスプローラーから raw に wav ファイルのドロップを試みました。 「移動」と表記されています。

Move

よくわかりませんので、とにかく追加したいので、このまま「Refactor」をクリックしてみます。

無事、raw に correct.wav(ドロップしたファイル名)が追加されましたが、 よくみるとアイコンに「?」マークがついています。 きっと問題があるのでしょう。

correct.wav

correct.wav を右クリックすると、表示されたメニューに Associate with File Type、 「ファイルタイプを関連付ける」がありました。

Associate with File Type

Associate with File Type」を選ぶと、 Register New File Type Association というダイアログが表示されましたが、 拡張子 wav に対応しそうな「音楽データ」のようなものは見つかりません。 wav ファイルに「?」アイコンが付き、ファイルタイプ登録のリストには適切なものが見つかりませんから、 もしかすると wav 形式がダメなのかもしれません。

ファイルタイプの関連付けダイアログに最適なものがなさそうですので「Cancel」し、 ほかに該当しそうなメニュー項目もありませんので、 「?」がついていても、とりあえずよしとします。


ちなみに「raw フォルダに移動」は、本当に移動でした。 Ctrl キーを押しながらのドロップであればコピーになりましたが、 その様子は Windows キー + Print Screen キーでのスクリーンショットでは撮れませんでした。

「raw フォルダに移動」してしまった場合は、エクスプローラーでプロジェクトを作成したフォルダを探し、 app、src、main、res、そして raw とフォルダを追っていきます。 するとそこに「移動された」音声データファイルがありますから、元の場所にコピーして取り戻しておきましょう。

▲ページ先頭へ

SoundPool で音を鳴らす

投稿 July 4, 2022

アプリ独自のビューとして追加したクラス FlashSosuuView で、画面にタッチされたときに音が鳴るようなコードにします。。

効果音のような短い音を鳴らしたい場合、 SoundPool クラス が便利なようです。

SoundPool

FlashSosuuView のクラス定義内、コンストラクタの前で、 SoundPool と、サウンド ID を保持する int 変数を定義します。 ここでは変数名を sndPool と sndID としています。

例のごとく、SoundPool が赤文字ですので、マウスでポイントし、Import class をクリックして解決しておきます。

音声データの読み込み

コンストラクタに、音声データを読み込むコード 2 行を追加しました。

本来はアプリが起動・再開されたときの処理 onResume 関数 にこの 2 行を入れ、 アプリ停止時の処理 onPause 関数で sndPool をリリースすべき、みたいです。 そうしないとアプリがバックグラウンドになっても音声データが確保され続けるため、メモリが無駄に消費された状態となります。 それはいわゆる「行儀が悪い」アプリです。

このようにコンストラクタで音声データを読み込んでしまうままなら、アプリが起動されたあと別アプリを操作する場合、 別アプリが使えるメモリが減るか、Android により音声データが解放されてしまい、このアプリに戻った時には読み込んでおいた音声データがなくなっているかも知れません。

今はテスト目的ですので、このまま続行します。

コードに戻ると、 AudioManager が赤文字ですので、マウスでポイントし、Import class をクリックして解決します。

new のあとの「SoundPool」に打消し線がついていて消えませんが、赤文字でもないので、このままにしておきます。 どういうことなのでしょうか?

タッチ処理に効果音再生コードを追加します。

SoundPool.play

音声データ correct.wav に「?」アイコンが付いていたり、 SoundPool のコンストラクタに打消し線が残っていることが気になりますが、 実機で動作させてみます。

すると、アプリの起動は正しく行われました。 そして画面をタッチすると、ちゃんと音声データが再生されました。 どちらもエラーではなさそうです。

前回までのコードに再生処理を追加していますから、 タッチイベント ACTION_DOWN と同時に指定している、ACTION_MOVE でも同じ処理に入ってしまいます、

Android の ACTION_MOVE は Windows の WM_MOUSEMOVE とは異なり、 タッチ位置に変更がなくても一定周期で発生するようですから、 タッチしっぱなしやタッチして指を動かしても、音が鳴ります。 このとき重なって音が鳴ることはなく、先に鳴っていた音が止まるようです。

▲ページ先頭へ

mp3 データを使ってみる

投稿 July 4, 2022

最後に、wav ではなく mp3 データではどうなのか、試してみます。

あらかじめ、correct-mp3.mp3 というファイルを用意しました。 Java のコードから、R.raw.correct のように音声データを指定していましたので、 correct.mp3 のように拡張子だけ異なる同じファイル名にしてしまうと、 うまく追加できないか、混乱が起きることになると思います。

mp3 ファイルを raw フォルダにドロップして登録します。 下の画面では「移動」になっていますが、Ctrl キーを押しながらドロップすれば、コピーになります。 このように「移動」にすると、元のデータが失われます。

raw

今度は Ctrl キーを押しながらドロップしましたので、「Move」ではなく「Copy」と書かれたダイアログになりました。 wav のときと同じように見えますが、下の方が違っているようです。

Copy

今は raw に追加したいので、このまま OK をクリックしてみます。

correct-mp3.mp3

raw フォルダに登録はされましたが、赤い波線が付いています。

correct.wav は「?」アイコンがついていても問題ありませんでしたから、 ひとまずこのまま、アプリ独自のビュー FlashSosuuView のコンストラクタで音声データを読み込んでいる部分を、 R.raw.correct から R.raw.correct-mp3 に書き換えようとしましたが、 R.raw. まで入力したあと、correct しか選択肢に表示されませんでした。

ファイル名に問題があるのかと、いったん correct-mp3.mp3 を右クリックメニューで削除し、 元のファイル名を correctmp3.mp3 に変更(ハイフンを削除)して登録すると、 赤い波線が付かずに登録できました。

correctmp3.mp3

ファイル名にはハイフンは使えないということのようです。

これで FlashSosuuView のコンストラクタで行っている音声データの読み込みが書き換えられるようになりましたので、書き換えました。

R.raw.correctmp3

正しく登録できましたので実機で動作させてみると、mp3 でも再生できました。 mp3 のファイルサイズは wav のファイルサイズの半分程度になっていましたので、アプリをダウンロードする時間やストレージ消費を節約できることになるのでしょう。

▲ページ先頭へ

次は・・・

投稿 July 20, 2022

次は「Android Studio で画面を準備する」で、 画面上部のアプリ名が表示されている部分「アクションバー」を非表示にしたり、 デバイスを横に倒しても画面は縦のままにする画面の縦固定、 背景画像を用意してさまざまな解像度に対応する背景画像の描画、 そして画面のタッチでウェブサイトを開く処理を検討しています。

▲ページ先頭へ
line
関連トピックス
line

Canvas だけでもアプリはできる! #1
Android Studio で文字を自由に描画する

アプリ独自のビューを作成し、テキストを描画するまでのコードを作成しています。

Canvas だけでもアプリはできる! #2
Android Studio で画像を自由に描画する

透過ありの PNG 画像をリソースに追加し、等倍で、あるいは拡大・縮小して描画します。 タッチ処理も追加し、タッチした位置に画像が追従してくるコードにしています。

Canvas だけでもアプリはできる! #3
Android Studio でタイマーによる自動画面更新

MainActivity にタイマーを設定して、一定間隔で処理を呼び出すコードを作成しています。


Canvas だけでもアプリはできる! #5
Android Studio で画面を準備する

アクションバーの消去、画面の縦固定指定、背景画像描画、そしてタッチでウェブサイトを開くコードを実装しています。

Canvas だけでもアプリはできる! #6
Android Studio でボタン表示&入力

座標管理クラスを作成して画面に適切なサイズのボタンを表示し、どれが押されたか判断するタッチ処理を実装しています。 トースト表示や独自クラスの作成についても書いています。

Canvas だけでもアプリはできる! #7
Android Studio でゲームクラスを更新

正解のボタンをタッチしたとき効果音を鳴らす等の正解処理を行い、2 秒後に次の問題に自動的に進む処理を実装しています。 不正解ならトーストで理由を表示します。


Android Studio で全画面プロジェクトを作成する

Empty Activity では画面上部に邪魔になり得るタイトル表示領域がありますが、 Fullscreen Ativity なら、それがなくなるのか、新規プロジェクトを作成して確認しています。

Android Studio で ActionBar を非表示にする

Empty Activity では画面上部に邪魔になり得るタイトル表示領域がありますが、 プロジェクト内の設定の書き換えにより、別プロジェクトにしなくても非表示にできるようです。

Android Studio で Native C++ プロジェクトを作成する

目的としている C++ ネイティブコードを併用する Activity は、 Native C++ プロジェクトを作成すれば、比較的簡単に着手できそうです。

Android Studio で AdMob プロジェクトを作成する

もうひとつの目的としては、AdMob でアプリ内に広告を入れる、です。 AdMob Ads Activity なら簡単に実装できるのでしょうか?

アプリケーション名を指定する

C++ ネイティブアプリでアプリ名を設定する方法の詳細を検討しています。

line
その他のおすすめ
line

Android 開発に関する記事をまとめた Android 開発トップ もご覧ください。

素因数分解トレーニング

以降の数学の基本となる素因数分解の基本部分を、ひたすらトレーニングするための JavaScript コードについて書いています。

因数分解トレーニング(1)

因数分解の公式の一部について、ひたすらトレーニングするための JavaScript コードについて書いています。



© 2017-2022 StraightApps.com 無断転載を禁じます。No reproduction without permission.