Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.iptea.audio22;
- import android.media.AudioFormat;
- import android.media.AudioManager;
- import android.media.AudioTrack;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.SeekBar;
- import android.widget.TextView;
- import org.w3c.dom.Text;
- public class MainActivity extends AppCompatActivity {
- Thread t; //audio processing thread
- int sr = 44100; //sampling rate
- boolean isRunning = true; //audio on off
- SeekBar fSlider;
- double sliderval;
- private static TextView text_view;
- Button start;
- Button stop;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- seebBar();
- }
- public void buttonStartClick(View v) {
- //Button button = (Button) v;
- }
- public void buttonStopClick(View v) {
- }
- public void onDestroy(){
- super.onDestroy();
- isRunning = false;
- try {
- t.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- t = null;
- }
- public void seebBar() {
- final int progress_value;
- fSlider = (SeekBar) findViewById(R.id.frequency);
- text_view = (TextView)findViewById(R.id.textView2);
- text_view.setText("Progress: " + fSlider.getProgress() + " / " + fSlider.getMax());
- SeekBar.OnSeekBarChangeListener listener = new SeekBar.OnSeekBarChangeListener() {
- double fr2 = 440.f;
- double max_freq;
- int progress_value;
- public void onStopTrackingTouch(SeekBar seekBar) { }
- public void onStartTrackingTouch(SeekBar seekBar) { }
- public void onProgressChanged(SeekBar seekBar,
- int progress,
- boolean fromUser) {
- if(fromUser) sliderval = progress / (double)seekBar.getMax(); //pick slider value
- fr2 = 440 + 440*sliderval;
- max_freq = 440 + 440;
- text_view.setText("Progress: " + fr2 + " / " + max_freq); //fSlider.getMax()
- }
- };
- fSlider.setOnSeekBarChangeListener(listener);
- t = new Thread() {
- public void run() {
- // set process priority
- setPriority(Thread.MAX_PRIORITY); //instantiate thread object with max priority
- // set the buffer size
- int buffsize = AudioTrack.getMinBufferSize(sr, //setting the buffer size for output audio
- AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
- // create an audiotrack object
- AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, //instantiate audioTrack object
- sr, AudioFormat.CHANNEL_OUT_MONO,
- AudioFormat.ENCODING_PCM_16BIT, buffsize,
- AudioTrack.MODE_STREAM);
- short samples[] = new short[buffsize]; //audio synthesis
- int amp = 10000;
- double twopi = 8.*Math.atan(1.);
- double fr = 440.f;
- double ph = 0.0;
- // start audio
- audioTrack.play(); //audio running
- // synthesis loop
- while(isRunning){ //synthesis loop
- fr = 440 + 440*sliderval;
- for(int i=0; i < buffsize; i++){
- samples[i] = (short) (amp*Math.sin(ph));
- ph += twopi*fr/sr;
- }
- audioTrack.write(samples, 0, buffsize);
- }
- audioTrack.stop();
- audioTrack.release();
- }
- };
- t.start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement