Thứ Sáu, 31 tháng 8, 2018

Android - Trình quản lý âm thanh

Học lập trình Android bạn có thể dễ dàng kiểm soát âm lượng chuông và chuông của bạn tức là: (im lặng, rung, to, vv) trong android. Android cung cấp lớp AudioManager cung cấp quyền truy cập vào các điều khiển này.

Để sử dụng lớp Android Manager, trước tiên bạn phải tạo một đối tượng của lớp AudioManager bằng cách gọi phương thức getSystemService () . Cú pháp của nó được đưa ra dưới đây.
private AudioManager myAudioManager;
myAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
Khi bạn khởi tạo đối tượng của lớp AudioManager , bạn có thể sử dụng phương thức setRingerMode để đặt cấu hình âm thanh hoặc chuông của thiết bị. Cú pháp của nó được đưa ra dưới đây.
myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
Phương thức setRingerMode lấy một số nguyên làm tham số. Đối với mỗi chế độ, một số nguyên được gán sẽ phân biệt giữa các chế độ khác nhau. Các chế độ có thể là.

Sr.NoChế độ & mô tả
1RINGER_MODE_VIBRATE

Chế độ này đặt thiết bị ở chế độ rung.
2RINGER_MODE_NORMAL

Chế độ này đặt thiết bị ở chế độ bình thường (lớn).
3RINGER_MODE_SILENT

Chế độ này đặt thiết bị ở chế độ im lặng.
Một khi bạn đã thiết lập chế độ, bạn có thể gọi phương thức getRingerMode () để có được trạng thái thiết lập của hệ thống. Cú pháp của nó được đưa ra dưới đây.
int mod = myAudioManager.getRingerMode();
Ngoài phương thức getRingerMode, còn có các phương thức khác có sẵn trong lớp AudioManager để điều khiển âm lượng và các chế độ khác. Chúng được liệt kê dưới đây.

Sr.NoPhương pháp & mô tả
1adjustVolume (int hướng, int cờ)

Phương pháp này điều chỉnh âm lượng của luồng có liên quan nhất
2getMode ()

Phương thức này trả về chế độ âm thanh hiện tại
3getStreamMaxVolume (int streamType)

Phương thức này trả về chỉ mục khối lượng tối đa cho một luồng cụ thể
4getStreamVolume (int streamType)

Phương thức này trả về chỉ mục khối lượng hiện tại cho một luồng cụ thể
5isMusicActive ()

Phương pháp này kiểm tra xem có bất kỳ nhạc nào đang hoạt động hay không.
6startBluetoothSco ()

Phương thức này Bắt đầu kết nối âm thanh bluetooth SCO
7stopBluetoothSco ()

Phương pháp này dừng kết nối âm thanh bluetooth SCO.

Thí dụ

Ví dụ dưới đây minh họa việc sử dụng lớp AudioManager. Nó tạo ra một ứng dụng cho phép bạn thiết lập các chế độ chuông khác nhau cho thiết bị của bạn.

Để thử nghiệm với ví dụ này, bạn cần chạy trên một thiết bị thực tế.

Các bướcSự miêu tả
1Bạn sẽ sử dụng Android studio IDE để tạo ứng dụng Android theo gói com.example.sairamkrishna.myapplication.
2Sửa đổi tệp src / MainActivity.java để thêm mã AudioManager
3Sửa đổi tệp XML bố trí res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
4Sửa đổi tệp res / values ​​/ string.xml và thêm các thành phần chuỗi cần thiết.
5Sửa đổi AndroidManifest.xml để thêm các quyền cần thiết.
6Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Đây là nội dung của src / MainActivity.java
package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;

import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends Activity {
   Button mode,ring,vibrate,silent;
   private AudioManager myAudioManager;

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

      vibrate=(Button)findViewById(R.id.button3);
      ring=(Button)findViewById(R.id.button2);

      mode=(Button)findViewById(R.id.button);
      silent=(Button)findViewById(R.id.button4);
      myAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

      vibrate.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
            Toast.makeText(MainActivity.this,"Now in Vibrate Mode",
               Toast.LENGTH_LONG).show();
         }
      });

      ring.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            myAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            Toast.makeText(MainActivity.this,"Now in Ringing Mode",
               Toast.LENGTH_LONG).show();
         }
      });

      silent.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            myAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
            Toast.makeText(MainActivity.this,"Now in silent Mode",
               Toast.LENGTH_LONG).show();
         }
      });

      mode.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int mod=myAudioManager.getRingerMode();
            if(mod==AudioManager.RINGER_MODE_VIBRATE){
               Toast.makeText(MainActivity.this,"Now in Vibrate Mode",
                  Toast.LENGTH_LONG).show();
            } else if(mod==AudioManager.RINGER_MODE_NORMAL){
               Toast.makeText(MainActivity.this,"Now in Ringing Mode",
                  Toast.LENGTH_LONG).show();
            } else {
               Toast.makeText(MainActivity.this,"Now in Vibrate Mode",
                  Toast.LENGTH_LONG).show();
            }
         }
      });
   }
}
Đây là nội dung của activity_main.xml

Ở đây abc biểu thị logo của hướng dẫn
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Android Audio Recording"
      android:id="@+id/textView"
      android:textSize="30dp"
      android:layout_alignParentTop="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorialspoint"
      android:id="@+id/textView2"
      android:textColor="#ff3eff0f"
      android:textSize="35dp"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_alignLeft="@+id/textView2"
      android:layout_alignStart="@+id/textView2"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Mode"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_marginTop="59dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Ring"
      android:id="@+id/button2"
      android:layout_alignTop="@+id/button"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="vibrate"
      android:id="@+id/button3"
      android:layout_alignTop="@+id/button2"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Silent"
      android:id="@+id/button4"
      android:layout_below="@+id/button2"
      android:layout_alignLeft="@+id/button2"
      android:layout_alignStart="@+id/button2" />     
</RelativeLayout>
Đây là nội dung của Strings.xml
<resources>
   <string name="app_name">My Application</string>
</resources>
Đây là nội dung của AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication"
         android:label="@string/app_name" >
      
         <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 cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình.

Để chạy ứng dụng từ Android Studio, 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 Chạy biểu tượng từ thanh công cụ. Android studio sẽ hiển thị Hình ảnh

Bây giờ chọn nút im lặng, bạn sẽ nhận được biểu tượng im lặng tại thanh Thông báo

học android
Học lập trình Android

Bây giờ chỉ cần chọn nút chuông và sau đó nhấn nút chế độ hiện tại để xem liệu trạng thái của nó có được đặt hay không.

Học lập trinh Android

Bây giờ nhấn nút Vibrate và sau đó nhấn nút chế độ hiện tại để thấy rằng nếu nó được thiết lập hay không. Nó sẽ hiển thị màn hình sau đây.

học lập trình Android

Android - Thu âm

Học lập trình Android có micrô tích hợp sẵn qua đó bạn có thể ghi âm và lưu trữ âm thanh hoặc phát trong điện thoại. Có rất nhiều cách để làm điều đó nhưng cách phổ biến nhất là thông qua lớp MediaRecorder.

Android cung cấp lớp MediaRecorder để ghi lại âm thanh hoặc video. Để sử dụng lớp MediaRecorder, trước tiên bạn sẽ tạo một thể hiện của lớp MediaRecorder. Cú pháp của nó được đưa ra dưới đây.
MediaRecorder myAudioRecorder = new MediaRecorder();
Bây giờ bạn sẽ thiết lập định dạng nguồn, đầu ra và mã hóa và tệp đầu ra. Cú pháp của họ được đưa ra dưới đây.
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
Sau khi xác định nguồn âm thanh và định dạng và tập tin đầu ra của nó, chúng ta có thể gọi hai phương thức cơ bản chuẩn bị và bắt đầu ghi âm.
myAudioRecorder.prepare();
myAudioRecorder.start();
Ngoài các phương pháp này, còn có các phương pháp khác được liệt kê trong lớp MediaRecorder cho phép bạn kiểm soát nhiều hơn đối với ghi âm và quay video.

Sr.NoPhương pháp & mô tả
1setAudioSource ()

Phương pháp này chỉ định nguồn âm thanh cần ghi
2setVideoSource ()

Phương pháp này chỉ định nguồn của video sẽ được ghi lại
3setOutputFormat ()

Phương pháp này chỉ định định dạng âm thanh trong đó âm thanh được lưu trữ
4setAudioEncoder ()

Phương pháp này chỉ định bộ mã hóa âm thanh sẽ được sử dụng
5setOutputFile ()

Phương pháp này cấu hình đường dẫn đến tệp mà âm thanh đã ghi được lưu trữ
6dừng lại()

Phương pháp này dừng quá trình ghi âm.
7giải phóng()

Phương pháp này nên được gọi khi cần thiết cho máy ghi.
Thí dụ

Ví dụ này cung cấp trình diễn lớp MediaRecorder để ghi lại âm thanh và sau đó là lớp MediaPlayer để phát âm thanh đã ghi.

Để thử nghiệm với ví dụ này, bạn cần chạy trên một thiết bị thực tế.

Các bướcSự miêu tả
1Bạn sẽ sử dụng Android studio IDE để tạo một ứng dụng Android và đặt tên nó là AudioCapture theo một gói com.example.sairamkrishna.myapplication.
2Sửa đổi tệp src / MainActivity.java để thêm mã AudioCapture
3Sửa đổi tệp XML bố trí res / layout / activity_main.xml thêm bất kỳ thành phần GUI nào nếu cần.
4Sửa đổi AndroidManifest.xml để thêm các quyền cần thiết.
5Chạy ứng dụng và chọn một thiết bị Android đang chạy và cài đặt ứng dụng trên đó và xác minh kết quả.
Đây là nội dung của src / MainActivity.java
package com.example.sairamkrishna.myapplication;

import android.media.MediaPlayer;
import android.media.MediaRecorder;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;

import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.util.Random;

import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;

import android.support.v4.app.ActivityCompat;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

   Button buttonStart, buttonStop, buttonPlayLastRecordAudio, 
      buttonStopPlayingRecording ;
   String AudioSavePathInDevice = null;
   MediaRecorder mediaRecorder ;
   Random random ;
   String RandomAudioFileName = "ABCDEFGHIJKLMNOP";
   public static final int RequestPermissionCode = 1;
   MediaPlayer mediaPlayer ;

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

      buttonStart = (Button) findViewById(R.id.button);
      buttonStop = (Button) findViewById(R.id.button2);
      buttonPlayLastRecordAudio = (Button) findViewById(R.id.button3);
      buttonStopPlayingRecording = (Button)findViewById(R.id.button4);

      buttonStop.setEnabled(false);
      buttonPlayLastRecordAudio.setEnabled(false);
      buttonStopPlayingRecording.setEnabled(false);

      random = new Random();

      buttonStart.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {

            if(checkPermission()) {

               AudioSavePathInDevice = 
                  Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + 
                     CreateRandomAudioFileName(5) + "AudioRecording.3gp";

               MediaRecorderReady();

               try {
                  mediaRecorder.prepare();
                  mediaRecorder.start();
               } catch (IllegalStateException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
               } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
               }

               buttonStart.setEnabled(false);
               buttonStop.setEnabled(true);

               Toast.makeText(MainActivity.this, "Recording started", 
                  Toast.LENGTH_LONG).show();
            } else {
               requestPermission();
            }

         }
      });

      buttonStop.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
            mediaRecorder.stop();
            buttonStop.setEnabled(false);
            buttonPlayLastRecordAudio.setEnabled(true);
            buttonStart.setEnabled(true);
            buttonStopPlayingRecording.setEnabled(false);

            Toast.makeText(MainActivity.this, "Recording Completed", 
               Toast.LENGTH_LONG).show();
         }
      });

      buttonPlayLastRecordAudio.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) throws IllegalArgumentException, 
            SecurityException, IllegalStateException {
               
            buttonStop.setEnabled(false);
            buttonStart.setEnabled(false);
            buttonStopPlayingRecording.setEnabled(true);

            mediaPlayer = new MediaPlayer();
            try {
               mediaPlayer.setDataSource(AudioSavePathInDevice);
               mediaPlayer.prepare();
            } catch (IOException e) {
               e.printStackTrace();
            }

            mediaPlayer.start();
            Toast.makeText(MainActivity.this, "Recording Playing", 
               Toast.LENGTH_LONG).show();
         }
      });

      buttonStopPlayingRecording.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
            buttonStop.setEnabled(false);
            buttonStart.setEnabled(true);
            buttonStopPlayingRecording.setEnabled(false);
            buttonPlayLastRecordAudio.setEnabled(true);

            if(mediaPlayer != null){
               mediaPlayer.stop();
               mediaPlayer.release();
               MediaRecorderReady();
            }
         }
      });
      
   }

   public void MediaRecorderReady(){
      mediaRecorder=new MediaRecorder();
      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
      mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
      mediaRecorder.setOutputFile(AudioSavePathInDevice);
   }

   public String CreateRandomAudioFileName(int string){
      StringBuilder stringBuilder = new StringBuilder( string );
      int i = 0 ;
      while(i < string ) {   
         stringBuilder.append(RandomAudioFileName.
            charAt(random.nextInt(RandomAudioFileName.length())));

         i++ ;
      }
      return stringBuilder.toString();
   }

   private void requestPermission() {
      ActivityCompat.requestPermissions(MainActivity.this, new 
         String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode);
   }

   @Override
   public void onRequestPermissionsResult(int requestCode, 
      String permissions[], int[] grantResults) {
      switch (requestCode) {
         case RequestPermissionCode:
            if (grantResults.length> 0) {
            boolean StoragePermission = grantResults[0] == 
               PackageManager.PERMISSION_GRANTED;
            boolean RecordPermission = grantResults[1] == 
               PackageManager.PERMISSION_GRANTED;
                     
            if (StoragePermission && RecordPermission) {
               Toast.makeText(MainActivity.this, "Permission Granted", 
                  Toast.LENGTH_LONG).show();
            } else {
               Toast.makeText(MainActivity.this,"Permission 
                  Denied",Toast.LENGTH_LONG).show();
            }
         }
         break;
      }
   }

   public boolean checkPermission() {
      int result = ContextCompat.checkSelfPermission(getApplicationContext(), 
         WRITE_EXTERNAL_STORAGE);
      int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), 
         RECORD_AUDIO);
      return result == PackageManager.PERMISSION_GRANTED && 
         result1 == PackageManager.PERMISSION_GRANTED;
   }
}
Đây là nội dung của activity_main.xml

Trong đoạn mã dưới đây abc biểu thị logo của hướng dẫn
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin">

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:src="@drawable/abc"/>

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Record"
      android:id="@+id/button"
      android:layout_below="@+id/imageView"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="37dp"
   />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="STOP"
      android:id="@+id/button2"
      android:layout_alignTop="@+id/button"
      android:layout_centerHorizontal="true"
   />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Play"
      android:id="@+id/button3"
      android:layout_alignTop="@+id/button2"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
   />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="STOP PLAYING RECORDING "
      android:id="@+id/button4"
      android:layout_below="@+id/button2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="10dp" 
   />
</RelativeLayout>
Đây là nội dung của Strings.xml
<resources>
   <string name="app_name">My Application</string>
</resources>
Đây là nội dung của AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
 <uses-permission android:name="android.permission.STORAGE" /> 

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.MainActivity"
         android:label="@string/app_name" >
      
         <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 cho rằng bạn đã kết nối thiết bị Android Mobile thực tế với máy tính của mình. Để chạy ứng dụng từ Android studio, 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 biểu tượng Chạy từ thanh công cụ. Trước khi bắt đầu ứng dụng của bạn, Android studio sẽ hiển thị các hình ảnh sau.

Bây giờ theo mặc định, bạn sẽ thấy nút dừng và phát vô hiệu hóa. Chỉ cần nhấn nút Ghi và ứng dụng của bạn sẽ bắt đầu ghi âm. Nó sẽ hiển thị màn hình sau đây.

học lập trình Android

Bây giờ chỉ cần nhấn nút dừng và nó sẽ lưu âm thanh được ghi vào thẻ sd bên ngoài. Khi bạn nhấp vào nút dừng, màn hình sau sẽ xuất hiện.

Học lập trình Android

Bây giờ chỉ cần nhấn nút phát và âm thanh đã ghi sẽ chỉ bắt đầu phát trên thiết bị. Thông báo sau xuất hiện khi bạn nhấp vào nút phát.
lập trình Android

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...