おすすめ!プログラミング学習サービス5選!詳しくはこちら

2023Androidアプリ入門:MediaPlayer、seekbar(Bumblebee)

こんにちは! 文系SEの焼き芋です!

アンドロイドアプリ開発で

『音声ファイルの再生方法』

の実装方法が分からない

という悩みを抱えていませんか?

そこで、今回は「簡単なアプリ」を作って基本的な使い方をご紹介します。

焼き芋

この記事はこんな人におすすめです!
・Androidアプリ開発をこれから始める方

この記事で解決できる悩み

以下の基本的な使い方が分かります。

  • MediaPlayer
  • seekbar
目次

完成アプリ

作成するアプリの完成イメージは、以下の画面の通りです。

デモアプリ完成イメージ

アプリの仕様について

デモアプリの仕様は以下の通りです。

デモアプリの仕様
  • 「再生」ボタンで音楽再生
  • 「一時停止」ボタンで再生された音楽が停止
  • 「停止」ボタンで音楽が初めに戻って停止
  • 「音量の調整バー」で音のボリュームを調整
  • 「再生位置の調整バー」で再生位置を変更可能

開発環境

android studio バージョン Bumblebee
android studio バージョン Bumblebee

今回の開発環境は以下の通りです。

OSWindows10
メモリ8GB
android studioAndroid Studio Bumblebee (2021.1.1)
JDK1.8.0_172
プログラミング言語Java
開発環境
焼き芋

プロジェクト作成方法は、

以下の記事をご参考にして下さい!


プログラミングの手順

それでは、プログラミングを以下の手順1~3を解説していきます!

STEP
音声ファイルを格納
STEP
画面レイアウトの実装(activity_main.xml)
STEP
プログラム処理の実装(MainActivity.java)

音声ファイルを格納

ファイル構成の解説
ファイル構成

動画ファイルを「res>raw」の下に格納します。
今回の例では以下のファイルを格納しました。
「birdsound.mp3」

画面レイアウトの実装(activity_main.xml)

「activity_main.xml」のプログラムソースコードは以下の通りです。

プログラコードを見る!(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="12dp"
        android:layout_marginTop="42dp"
        android:layout_marginEnd="301dp"
        android:text="再生位置の調整"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/seekBar1"
        />

    <Button
        android:id="@+id/buttonPlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="220dp"
        android:text="再生"
        android:onClick="onclickPlay"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/buttonPause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="270dp"
        android:text="一時停止"
        android:onClick="onclickPause"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"  />
    <Button
        android:id="@+id/buttonStop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="320dp"
        android:text="停止"
        android:onClick="onclickStop"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"  />

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="400dp"
        android:layout_height="30dp"
        android:layout_marginStart="2dp"
        android:layout_marginTop="46dp"
        android:layout_marginEnd="10dp"
        android:layout_marginBottom="76dp"
        app:layout_constraintBottom_toTopOf="@+id/seekBar2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonStop" />

    <SeekBar
        android:id="@+id/seekBar2"
        android:layout_width="400dp"
        android:layout_height="30dp"
        android:layout_marginStart="2dp"
        android:layout_marginTop="76dp"
        android:layout_marginEnd="9dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/seekBar1" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="11dp"
        android:layout_marginTop="377dp"
        android:layout_marginEnd="330dp"
        android:text="音量の調整"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="347dp"
        android:layout_height="74dp"
        android:layout_marginTop="60dp"
        android:background="#FBD2D2"
        android:gravity="center"
        android:text="焼き芋ミュージック"
        android:textColor="#FF5722"

        android:textSize="34sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

プログラム処理の実装(MainActivity.java)

「MainActivity.java」のプログラムソースコードは以下の通りです。

プログラコードを見る!(MainActivity.java)
package com.yakiimosan.demoplayaudio;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {


    MediaPlayer mplayer;
    AudioManager audioManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mplayer = MediaPlayer.create(this,R.raw.birdsound);

        audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

        SeekBar volumeController = (SeekBar) findViewById(R.id.seekBar1);
        volumeController.setMax(maxVolume);
        volumeController.setProgress(curVolume);

        volumeController.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {


                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,i,0);

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        SeekBar scrubber  = (SeekBar)findViewById(R.id.seekBar2);
        scrubber.setMax(mplayer.getDuration());

        new Timer().scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                scrubber.setProgress(mplayer.getCurrentPosition());
            }
        },0,100);

        scrubber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

                mplayer.seekTo(i);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }

    public void onclickPlay(View view){


        mplayer.start();

    }

    public void onclickPause(View view){

        mplayer.pause();

    }

    public void onclickStop(View view){

        mplayer.pause();

    }




}

まとめ「Androidアプリの基礎(MediaPlayer、seekbar

今回の記事では

アンドロイドアプリ開発で『音声ファイルの再生方法』について解説しました。

ポイント

以下の基本的な使い方

  • MediaPlayer
  • seekbar

「アンドロイドアプリ開発で『音声ファイルの再生方法』
の実装イメージは分かったのではないでしょうか?

焼き芋

公式のandroidアプリ開発ユーザーガイドはコチラから参照できます!
開発時のご参考にどうぞ


以上、最後まで読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次