Computer >> Máy Tính >  >> Lập trình >> Android

Chơi một giai điệu tùy ý với Android?


Ví dụ này minh họa cách tôi phát một giai điệu tùy ý với android.

Bước 1 - Tạo một dự án mới trong Android Studio, đi tới Tệp ⇒ Dự án Mới và điền tất cả các chi tiết cần thiết để tạo một dự án mới.

Bước 2 - Thêm mã sau vào res / layout / activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
   xmlns:tools="https://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:gravity="center"
   android:orientation="vertical"
   android:padding="16dp"
   tools:context=".MainActivity">
   <ImageView
      android:layout_width="200dp"
      android:layout_height="300dp"
      android:src="@drawable/ic_music_note_black_24dp"/>
   <TextView
      android:text="Increase the emulator Volume, Listen to the arbitrary tone!"
      android:textSize="16sp"
      android:textStyle="bold|italic"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
</LinearLayout>

Bước 3 - Thêm mã sau vào src / MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Bundle;
import android.os.Handler;
public class MainActivity extends AppCompatActivity {
   private final int duration = 10;
   private final int sampleRate = 8000;
   private final int numSamples = duration * sampleRate;
   private final double[] sample = new double[numSamples];
   private final byte[] generatedSnd = new byte[2 * numSamples];
   Handler handler = new Handler();  
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   @Override
   protected void onResume() {
      super.onResume();
      final Thread thread = new Thread(new Runnable() {
         public void run() {
            genTone();
            handler.post(new Runnable() {
               public void run() {
                  playSound();
               }
            });
         }
      });
      thread.start();
   }
   void genTone(){
      for (int i = 0; i < numSamples; ++i) {
         double freqOfTone = 440;
         sample[i] = Math.sin(2 * Math.PI * i / (sampleRate/ freqOfTone));
      }
      int idx = 0;
      for (final double dVal : sample) {
         final short val = (short) ((dVal * 32767));
         generatedSnd[idx++] = (byte) (val & 0x00ff);
         generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
      }
   }
   void playSound(){
      final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
      sampleRate, AudioFormat.CHANNEL_OUT_MONO,
      AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length,
      AudioTrack.MODE_STATIC);
      audioTrack.write(generatedSnd, 0, generatedSnd.length);
      audioTrack.play();
   }
}

Bước 4 - Thêm mã sau vào androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
         <activity android:name=".MainActivity">
            <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity>
   </application>
</manifest>

Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị Di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ studio android, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Run Chơi một giai điệu tùy ý với Android? biểu tượng từ thanh công cụ. Chọn thiết bị di động của bạn làm tùy chọn, sau đó kiểm tra thiết bị di động sẽ hiển thị màn hình mặc định của bạn -

Chơi một giai điệu tùy ý với Android?