Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java и микрофон, как получить данные с микрофона 
V
    Опции темы
Enoel
Дата 11.5.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.5.2008

Репутация: нет
Всего: нет



помогите подключить микрофон в java.
Нашел исходник, но почемуто не работает так как надо.
Код
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;

public class AudioCapture extends JFrame{
    boolean stopCapture = false;
    ByteArrayOutputStream byteArrayOutputStream;
    AudioFormat audioFormat;
    TargetDataLine targetDataLine;
    AudioInputStream audioInputStream;
    SourceDataLine sourceDataLine;
    public static void main(String args[]){
        new AudioCapture();
    }
    public AudioCapture(){
        final JButton captureBtn = new JButton("Capture");
        final JButton stopBtn = new JButton("Stop");
        final JButton playBtn = new JButton("Playback");
        captureBtn.setEnabled(true);
        stopBtn.setEnabled(false);
        playBtn.setEnabled(false);
        //Регистрация анонимных слушателей
        captureBtn.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    captureBtn.setEnabled(false);
                    stopBtn.setEnabled(true);
                    playBtn.setEnabled(false);
                    //Захват ввода данных с микрофон до тех пор, пока не нажата кнопка Stop
                    captureAudio();
                }
            }
        );
        getContentPane().add(captureBtn);
        stopBtn.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    captureBtn.setEnabled(true);
                    stopBtn.setEnabled(false);
                    playBtn.setEnabled(true);
                    //Остановка ввода данных с микрофона
                    stopCapture = true;
                }
            }
        );
        getContentPane().add(stopBtn);
        playBtn.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    //Воспроизведения сохраненных данных
                    playAudio();
                }
            }
        );
        getContentPane().add(playBtn);
        getContentPane().setLayout(new FlowLayout());
        setTitle("Capture/Playback Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(250,70);
        setVisible(true);
    }
    //Этот метод захватывает аудио вход от микрофона и сохраняет в ByteArrayOutputStream
    private void captureAudio(){
        try{
            //Получение данных для захвата аудио
            audioFormat = getAudioFormat();
            DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);
            targetDataLine = (TargetDataLine) AudioSystem.getLine( dataLineInfo);
            targetDataLine.open(audioFormat);
            targetDataLine.start();
            //Создание и запуск потока для захвата данных с микрофона
            Thread captureThread = new Thread(new CaptureThread());
            captureThread.start();
        }catch(Exception e){
            System.out.println(e);
            System.exit(0);
        }
    }
    //Метод для проигрывания аудио данных из сохраненных в ByteArrayOutputStream данных
    private void playAudio(){
        try{
            //Получение данных аудио формата для воспроизводства
            byte audioData[] = byteArrayOutputStream.toByteArray();
            InputStream byteArrayInputStream = new ByteArrayInputStream(audioData);
            AudioFormat audioFormat = getAudioFormat();
            audioInputStream = new AudioInputStream(byteArrayInputStream, audioFormat, audioData.length/audioFormat.getFrameSize());
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat);
            sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
            sourceDataLine.open(audioFormat);
            sourceDataLine.start();
            //Создание и запуск потока для проигрывания сохраненных данных
            Thread playThread = new Thread(new PlayThread());
            playThread.start();
        }catch(Exception e){
            System.out.println(e);
            System.exit(0);
        }
    }
    //Этот метод создает и возвращает AudioFormat
    private AudioFormat getAudioFormat(){
        float sampleRate = 8000.0F;
        //8000,11025,16000,22050,44100
        int sampleSizeInBits = 16;
        //8,16
        int channels = 1;
        //1,2
        boolean signed = true;
        //true,false
        boolean bigEndian = false;
        //true,false
        return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
    }
    //Внутренний класс для сбора данных с микрофона
    class CaptureThread extends Thread{
        byte tempBuffer[] = new byte[10000];
        public void run(){
            byteArrayOutputStream = new ByteArrayOutputStream();
            stopCapture = false;
            try{
                while(!stopCapture){
                    // прочитать данные
                    int cnt = targetDataLine.read(tempBuffer, 0, tempBuffer.length);
                    if(cnt>0){
                        //Сохранение данных
                        byteArrayOutputStream.write(tempBuffer, 0, cnt);
                    }
                }
                byteArrayOutputStream.close();
            }catch(Exception e){
                System.out.println(e);
                System.exit(0);
            }
        }
    }
    //Внутренний класс для воспроизведения данных
    class PlayThread extends Thread{
        byte tempBuffer[] = new byte[10000];
        public void run(){
            try{
                int cnt;
                while((cnt = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1){
                    if(cnt>0){
                        sourceDataLine.write(tempBuffer, 0, cnt);
                    }
                }
                sourceDataLine.drain();
                sourceDataLine.close();
            }catch(Exception e){
                System.out.println(e);
                System.exit(0);
            }
        }
    }
}

PM MAIL   Вверх
Samotnik
Дата 11.5.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Enoel @  11.5.2008,  13:57 Найти цитируемый пост)
почемуто не работает так как надо

а как надо ?  smile 
PM MAIL   Вверх
Enoel
Дата 11.5.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.5.2008

Репутация: нет
Всего: нет



ну по нажатии кнопки Capture должен получать звук с микрофона, пока не нажата будет кнопка Stop(это вроде работает, дебаг показал что какие то данные он всеж получает, но всеж не факт что работает правильно).
а при нажатии кнопки Playback должен выводить полученное с микрофона на колонки, но в колонках тишина...
PM MAIL   Вверх
Enoel
Дата 11.5.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.5.2008

Репутация: нет
Всего: нет



усе нашел в чем ошибка... Всем спасибо за помощь...

Это сообщение отредактировал(а) Enoel - 11.5.2008, 15:13
PM MAIL   Вверх
GZep
Дата 5.8.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



поделись пожалуйста, где ошибка была? smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
rlepricon
Дата 23.11.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Прошу прощения, запостил не в ту тему...

Это сообщение отредактировал(а) rlepricon - 23.11.2009, 16:33
PM MAIL   Вверх
FranticFreak
Дата 16.5.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.5.2011

Репутация: нет
Всего: нет



Помогите! 
как как в реальном времени выводить звук с микрофона на колонки?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.