2015-10-06 16 views
7

Tôi đang thử một bộ cân bằng âm thanh nhỏ. Tôi muốn thêm vào nó các tùy chọn treble, stereo giống như trong trình chơi PowerAMP.Làm thế nào để thêm các tùy chọn âm thanh nổi, treble trong bộ cân bằng âm thanh?

Image of poweramp music player

tôi thực hiện equlizer với 5 ban nhạc thành công như thế này: -

public class FragmentEqualizer extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     super.onCreateView(inflater,container,savedInstanceState); 

     equalizer = new EQ(getActivity(), new Equalizer(0,com.androidhive.musicplayer.AndroidBuildingMusicPlayerActivity.mp.getAudioSessionId())); 
     for(Bar bar : eqBars) 
      bar.setActiveEQ(); 
     maximum= EQ.getEqualizer().getBandLevelRange()[1]; 
     minimum= EQ.getEqualizer().getBandLevelRange()[0]; 
    } 


public void onActivityCreated(Bundle savedInstanceState) { 
       super.onActivityCreated(savedInstanceState); 


        lvforprest.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
          @Override 
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
           btnformenu.setText(gtuforpresets.get(position).gtumcaFirstName); 
           if(position!=0 && position <=10) 
           { 
            try 
            { 
           EQ.getEqualizer().usePreset((short) (position-1)); 
          EQ.getEqualizer().setBandLevel((short)0, EQ.getEqualizer().getBandLevel((short) 0)); 
          EQ.getEqualizer().setBandLevel((short)1, EQ.getEqualizer().getBandLevel((short) 1)); 
          EQ.getEqualizer().setBandLevel((short)2, EQ.getEqualizer().getBandLevel((short) 2)); 
          EQ.getEqualizer().setBandLevel((short)3, EQ.getEqualizer().getBandLevel((short) 3)); 
          EQ.getEqualizer().setBandLevel((short)4, EQ.getEqualizer().getBandLevel((short) 4)); 

          eqBars.get(0).setEQPosition(EQ.getEqualizer().getBandLevel((short) 0)); 
          eqBars.get(1).setEQPosition(EQ.getEqualizer().getBandLevel((short) 1)); 
          eqBars.get(2).setEQPosition(EQ.getEqualizer().getBandLevel((short) 2)); 
          eqBars.get(3).setEQPosition(EQ.getEqualizer().getBandLevel((short) 3)); 
          eqBars.get(4).setEQPosition(EQ.getEqualizer().getBandLevel((short) 4)); 
          seekbar1katop.setText(EQ.getEqualizer().getBandLevel((short) 0)+"mB"); 
          seekbar2katop.setText(EQ.getEqualizer().getBandLevel((short) 1)+"mB"); 
          seekbar3katop.setText(EQ.getEqualizer().getBandLevel((short) 2)+"mB"); 
          seekbar4katop.setText(EQ.getEqualizer().getBandLevel((short) 3)+"mB"); 
          seekbar5katop.setText(EQ.getEqualizer().getBandLevel((short) 4)+"mB"); 


           } 
            catch(IllegalStateException e) 
            { 
             Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show(); 

            } 
            catch(IllegalArgumentException e) 
           { 
             Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show(); 

            } 
            catch(UnsupportedOperationException e) 
            { 
             Toast.makeText(getActivity(),"Unable",Toast.LENGTH_SHORT).show(); 

            } 
           } 

          // Toast.makeText(getApplicationContext(),"You Clicked : " + mEqualizer.getEnabled(),Toast.LENGTH_SHORT).show(); 
          } 
         }); 

} 
} 

Trên code chỉ là một tóm tắt ngắn của bộ cân bằng của tôi code.it wont work cũng giống như một ví dụ tôi đăng ở đây. .

Tôi cũng muốn thêm hiệu ứng treble, stereo, mono vào bộ cân bằng của mình.

tôi đã thực hiện tăng độ bass như thế này:

public static void setBassBoost(BassBoost bassBoost, int percent) { 
     try{ 
      bassBoost.setStrength((short) ((short) 1000/100 * percent)); 
      bassBoost.setEnabled(true); 
     }catch (Exception e){ 

     } 
    } 

    public static void setBassBoostOff(BassBoost bassBoost) { 
     bassBoost.setEnabled(false); 
    } 

tôi đã sử dụng một lớp inbulilt cho tăng cường âm trầm.

Làm cách nào để thêm hiệu ứng treble và stereo/mono vào ứng dụng của tôi?

+1

Để thao tác treble và bass, hãy sử dụng [Hiệu ứng bộ chỉnh âm] (http://developer.android.com/reference/android/media/audiofx/Equalizer.html) và thay đổi cấp độ băng tần. Để mở rộng âm thanh nổi, hãy sử dụng [Hiệu ứng ảo hóa] (http://developer.android.com/reference/android/media/audiofx/Virtualizer.html). Tôi không chắc chắn "hiệu ứng mono" được cho là sẽ làm gì. – Michael

+0

cho tôi bản trình diễn này hoặc mô-đun này. bcz tôi cũng đã làm việc trang phục visulizer –

Trả lời

9

Để thay đổi âm trầm, giữa, treble, không cần sử dụng đối tượng AudioTrack (ngay cả với đối tượng này, bạn chỉ có thể phát lại dữ liệu PCM không nén).

Bạn chỉ cần điều chỉnh mức dải tần số thích hợp bằng cách sử dụng đối tượng Equalizer của mình. Để có được số lượng dải có sẵn, chỉ cần gọi:

myEqualizer.getNumberOfBands() 

Xét số lượng dải có sẵn, bây giờ bạn có thể thiết lập mức độ cho mỗi băng bằng cách sử dụng phương pháp sau đây:

myEqualizer.setBandLevel(band, level); 

nơi:

band: băng tần sẽ có mức tăng mới. Việc đánh số các băng tần bắt đầu từ 0 và kết thúc tại (số băng - 1).

mức: mức tăng mới tính bằng milibel sẽ được đặt thành băng nhất định. getBandLevelRange() sẽ xác định các giá trị tối đa và tối thiểu.

Ý nghĩa của mỗi ban nhạc, từ trái sang phải, được tóm tắt trong hình dưới đây:

bands meaning

CẬP NHẬT

Để thực hiện một tầm thường cân bằng hiệu lực thi hành, chỉ phân biệt khối lượng trái/phải trên trình phát của bạn (MediaPlayer, SoundPool, ...):

mediaPlayer.setVolume(left, right) 

Để có được một mono hiệu lực thi hành, bạn có thể xem xét sử dụng một Virtualizer, cung cấp một mở rộng hiệu ứng âm thanh stereo. Bạn có thể đặt sức mạnh của hiệu ứng ảo hóa sử dụng phương pháp này:

virtualizer.setStrength(1000); //range is [0..1000] 

Bạn cần phải đọc documentation cẩn thận để kiểm tra xem cấu hình hiện tại của virtualizer của bạn được thực sự được hỗ trợ bởi hệ thống cơ bản.


Dù sao, đây không phải là một đầu ra mono thực và tôi nghĩ rằng bạn sẽ không thể để có được một ouput mono trên loa stereo mà không sử dụng API mức thấp như AudioTrack (thực PowerAMP dựa trên các thư viện JNI mẹ đẻ cho đường dẫn âm thanh của nó). Nếu bạn muốn sử dụng AudioTrack để phát lại, bạn cần xem xét rằng nó chỉ hỗ trợ dữ liệu PCM (WAV) làm đầu vào: điều này có nghĩa là bạn sẽ không thể phát tệp âm thanh nén (như MP3, flac, ...) trực tiếp vì trước tiên bạn cần giải mã tệp âm thanh được nén theo cách thủ công.

[Compressed File (MP3)] ===> decode() ===> [PCM data] ===> customEffect() ===> AudioTrack playback() 

Vì vậy, để chơi một âm thanh nén sử dụng và AudioTrack (và cuối cùng tạo ra một hiệu ứng tùy chỉnh) các bước sau đây được yêu cầu:

  1. giải mã các tập tin nén sử dụng một decoder (KHÔNG có API HỆ THỐNG CÔNG CỘNG cho việc này, bạn cần thực hiện thủ công!).
  2. nếu cần thiết, chuyển đổi dữ liệu không nén trong một PCM format which is compatible with AudioTrack
  3. (cuối cùng) áp dụng chuyển đổi của bạn trên dòng dữ liệu PCM (ví dụ như bạn có thể kết hợp cả hai/kênh R L và tạo ra một hiệu ứng mono)
  4. play the PCM stream using an AudioTrack

tôi đề nghị bạn bỏ qua hiệu ứng này;)


về bass-boost ef fect, bạn cần kiểm tra xem cấu hình hiện tại của bạn có được hỗ trợ bởi thiết bị đang chạy hay không (như trình ảo hóa). Hãy xem here để biết thêm thông tin về điều này.

+0

Giữa ở đây có nghĩa là gì? –

+0

@developer * Giữa * là viết tắt của * các tần số tầm trung * – bonnyz

+0

tôi đã thử làm điều này. Nhưng nó không hoạt động như trong máy nghe nhạc powerAMP ..... tôi không thể nhận được bất kỳ thay đổi đáng kể nào trong âm thanh của bài hát –

Các vấn đề liên quan