Как замедлить и растянуть звук в Android? - PullRequest
4 голосов
/ 31 июля 2011

Я выяснил, что класс MediaPlayer не поддерживает изменение скорости воспроизведения. Я попробовал Soundpool, он работает, но когда я замедляю его до скорости 0.5f, высота становится странной (низкая высота звука). Я хочу изменить скорость, но сохранить ту же характеристику звука, поэтому, если я замедляю ее, она растягивает звук, но не понижает высоту звука. Какой лучший день для этого? Заранее благодарю за любую помощь!

Ответы [ 2 ]

1 голос
/ 20 мая 2012

Это может быть полезным. Попробовав все, я решил использовать SoundPool, чтобы изменить высоту тона. При скорости воспроизведения 2,0 звук воспроизводится с удвоенной частотой по сравнению с оригиналом, а при скорости воспроизведения 0,5 он воспроизводится с частотой, равной половине исходной частоты. Диапазон скорости воспроизведения составляет от 0,5 до 2,0. Но он работал с частотой ниже и выше, чем 0,5 и 2,0.

Я публикую свой рабочий код,

, но это просто для демонстрации. Здесь вам нужно вручную менять «скорость воспроизведения», каждый раз, когда вы устанавливаете приложение, например: «sp.play (Explosion, 1,1,0,0,1.5f)» здесь «1.5f» - скорость воспроизведения. Можно легко создать EditView или нечто подобное, чтобы установить значение скорости воспроизведения во время выполнения.

В этом приложении вам просто нужно коснуться экрана приложения, чтобы воспроизвести музыку с установленной скоростью воспроизведения.

import java.io.IOException;

import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SoundPoolActivity extends Activity implements OnClickListener {

    SoundPool sp;
    int explosion = 0;

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

       View v = new View(this);
       v.setOnClickListener(this);
       setContentView(v);
       sp = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
       //explosion = sp.load(this, R.raw.hh,0);
       explosion = sp.load("/sdcard/hh.m4a",0);


    }


    public void onClick(View v){
         if (explosion!=0){

             sp.play(explosion, 1,1,0,0,2.3f);
         }

    }
}
1 голос
/ 01 августа 2011

Посетите этот веб-сайт: http://www.pitchtech.ch/

"Исследовательский проект PitchTech направлен на обеспечение высококачественных преобразований звука, реализованных в Java."В нем размещены многочисленные исследовательские статьи, в которых достаточно информации, чтобы вы могли создать свою собственную или использовать одно из их реализованных аудио преобразований.

Я нашел его с помощью этого поиска Google: Аудио преобразования Stretch .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...