Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
1

Отображение содержимого звукового буфера в логах

08.10.2015, 19:47. Просмотров 802. Ответов 22
Метки нет (Все метки)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(!stopped)
            {
                
                short[] buffer = buffers[ix++ % buffers.length];
                //short[] buffer = new short[160];
                int n = recorder.read(buffer, 0, buffer.length);
 
                track.write(buffer, 0, buffer.length);
                Log.d("Func", " " + buffer); здесь выводится белеберда
            }
            }
       catch(Throwable x)
        {
            Log.d("Func", "Error reading voice audio", x);
        }
Я считываю звук с микрофона в буфер. Звук приложение воспроизводит нормально, но когда я вывожу содержимое буфера в лог то выводятся вот такие символы [S@418982c8 почему?? Можно ли содержимое буфера в котором звук отобразить в логах или нужно писать только в звуковой файл??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2015, 19:47
Ответы с готовыми решениями:

Удаление содержимого звукового файла
у меня есть файл (wav или mp3). мне нужно при нажатии на кнопку удалить содержимое этого файла так...

Отображение в логах неправильных путей в HTML
Всем доброго времени суток! Есть стандартный Apache 2, простой HTML c CSS. Если внутри HTML путь...

Проверка содержимого буфера
Здравствуйте. У меня есть ключ, например "Z|{L10-BDCX10-CEDC10-RTSF10". Мне нужно поместить ключ в...

Получение содержимого буфера обмена
Добрый день. Подскажите пожалуйста, как извлечь текст из буфера обмена средствами WinAPI?

Запись в ячейку содержимого из буфера обмена
Здравствуйте. Помогите решить задачу она заключается в следующем: Как записать в файл экселя - в...

22
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
08.10.2015, 20:16 2
yura91, буфер содержит байты. Что Вы хотите увидеть там? Писать в файл конечно же. Или Вы хотите чтобы логи звуки воспроизводили???
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
08.10.2015, 21:48  [ТС] 3
а буфер звука можно в JSON запихнуть и передать на сервер по TCP??
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 10:43 4
Цитата Сообщение от yura91 Посмотреть сообщение
а буфер звука можно в JSON запихнуть и передать на сервер по TCP??
можно запихнуть в любую обложку которая способна донести байтовый поток - хоть чистыми байтами посылайте. только не забудьте послать характеристики потока (количество каналов, частота, количество бит на отсчет). приложение Audio Control так и делает - перекидывает звук с одного телефона или пк (выступает в роли сервера) на другой телефон (выступает в роли клиента)
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
09.10.2015, 12:57  [ТС] 5
а как получить эти все характеристики??

Добавлено через 1 минуту
и что понимается под любой обложкой??
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 13:04 6
Цитата Сообщение от yura91 Посмотреть сообщение
а как получить эти все характеристики?
ну вы же считываете звук с микрофона и даже как то его воспроизводите в приложении? все это возможно только если вы их знаете... или вы не через AudioRecord/AudioTrack работаете?

Добавлено через 58 секунд
Цитата Сообщение от yura91 Посмотреть сообщение
и что понимается под любой обложкой?
ну вот вы хотите в JSON запихнуть. потом захотите в SOAP. или почтовый протокол или POST запрос... это и есть обложка
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
09.10.2015, 13:17  [ТС] 7
только не забудьте послать характеристики потока (количество каналов, частота, количество бит на отсчет)
А для чего эти характеристики нужны на сервере??

Добавлено через 1 минуту
Да верно через AudioRecord но на сервере чтобы воспроизвести звук мне тоже нужно знать эти характеристики??
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 13:51 8
вот у вас поток бит... откуда сервер узнает что у вас там звук 5.1 16 бит 44100 гц?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
09.10.2015, 14:08 9
vxg, а оно разве не записано в начале этого потока? Т.е. если знать формат файла, который должен получиться из этого потока и иметь обработчик этого формата - никакая доп. информация не нужна же вроде? Или я ошибаюсь?
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
09.10.2015, 15:03  [ТС] 10
А как записать байты звука из приложения просто в файл ??

Добавлено через 5 минут
у меня есть буфер звуковых байт в приложении и как этот буфер записать в звуковой файл?? можно ли это вообще?

Добавлено через 10 минут
ну или как его можно проиграть этот звук который пришел на сервер??
0
Valakin
299 / 100 / 15
Регистрация: 21.02.2015
Сообщений: 806
09.10.2015, 15:09 11
Цитата Сообщение от yura91 Посмотреть сообщение
ну или как его можно проиграть этот звук который пришел на сервер??
проиграть просто - отправить обратно на телефон и проиграть
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 15:54 12
Цитата Сообщение от yura91 Посмотреть сообщение
А как записать байты звука из приложения просто в файл ??
вот так можно записать заголовок. ну а после него пойдут ваши данные
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    private void writeWavHeader(int recorded) throws IOException {
        /*
        DWORD rId; //"RIFF" = 0x46464952
        DWORD rLen; //36 + dLen
        DWORD wId; //"WAVE" = 0x45564157
        DWORD fId; //"fmt " = 0x20746D66
        DWORD fLen; //16
        WORD wFormatTag; /1 (WAVE_FORMAT_PCM)
        WORD nChannels;
        DWORD nSamplesPerSec;
        DWORD nAvgBytesPerSec;
        WORD nBlockAlign;
        WORD wBitsPerSample;
        DWORD dId; //"data" = 0x61746164
        DWORD dLen;
        */
        
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x46464952).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(36 + recorded).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x45564157).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x20746D66).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(16).array());
        recordOs.write(ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort((short)1).array());
        recordOs.write(ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort((short)nChannels).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(nSamplesPerSec).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(nSamplesPerSec * nChannels * bitsPerSample / 8).array());
        recordOs.write(ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort((short)(nChannels * bitsPerSample / 8)).array());
        recordOs.write(ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort((short)bitsPerSample).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x61746164).array());
        recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(recorded).array());
    }
Добавлено через 4 минуты
Цитата Сообщение от Spelcrawler Посмотреть сообщение
а оно разве не записано в начале этого потока?
если вы ее туда не записали то откуда она там?
1
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
09.10.2015, 16:00  [ТС] 13
а что в этом заголовке содержится??что за инфа??и где путь к самому файлу куда этот заголовок будет записан??
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 16:09 14
Цитата Сообщение от yura91 Посмотреть сообщение
а что в этом заголовке содержится??
это заголовок обычного wav файла, что в нем лежит можно почитать в описании формата или чисто ради любознательности приблизительно на глаз прикинуть по коду
Цитата Сообщение от yura91 Посмотреть сообщение
и где путь к самому файлу куда этот заголовок будет записан??
создание файла и запись в него данных вам придется реализовать самому - эта задача не является ключевой судя по вашему вопросу
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
09.10.2015, 17:06  [ТС] 15
recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x46464952).array());

в какую переменную сохранит результат данная операция?

Добавлено через 2 минуты
мне же нужно знать какую переменную записывать в файл?? я его создам в файловой системе а дальше в него же надо сначала заголовок записать. Приведенный выше код только генерирует заголовок?? Он же никуда его не записывает??
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
09.10.2015, 17:17 16
Цитата Сообщение от vxg Посмотреть сообщение
если вы ее туда не записали то откуда она там?
А при старте записи (через диктофон) оно туда не запишется?
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
09.10.2015, 17:25 17
Цитата Сообщение от yura91 Посмотреть сообщение
в какую переменную сохранит результат данная операция?
Java
1
2
3
4
5
6
7
8
9
10
11
try {
    File recordFile = new File(folder, fileName); //тут на самом деле должны быть папка и имя файла
    FileOutputStream recordOs = new FileOutputStream(recordFile);
    int recorded = 123; //тут на самом деле должно быть сколько вы байт записали
    writeWavHeader(recorded); //в оригинале recordOs была глобальной статической поэтому решите вопрос как ее отдать в функцию формирующую заголовок сами
    byte[] buffer = new byte[recorded]; //тут на самом деле должны быть ваши байты
    recordOs.write(buffer, 0, recorded);
    recordOs.flush();
    recordOs.close();
} catch (Exception e) {
}
Добавлено через 1 минуту
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А при старте записи (через диктофон) оно туда не запишется?
нет если вы имеете ввиду диктофон=AudioRecord
1
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
14.10.2015, 00:56  [ТС] 18
recordOs.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(0x46464952).array());

что записывает в заголовок эта строчка кода??
0
vxg
Модератор
3281 / 2077 / 328
Регистрация: 13.01.2012
Сообщений: 8,073
14.10.2015, 16:40 19
Цитата Сообщение от yura91 Посмотреть сообщение
что записывает в заголовок эта строчка кода??
ну конечно же она записывает в заголовок CCV вашей банковской карты!! вы не можете поглядеть что ли на функцию записи заголовка? "RIFF" = 0x46464952
0
yura91
2 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,328
15.10.2015, 14:37  [ТС] 20
"RIFF" = 0x46464952 я просто не знаю что это за значение?? зачем оно записывается??

Добавлено через 35 секунд
0x46464952 это шестнадцатиричный вид насколько я понимаю??
0
15.10.2015, 14:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2015, 14:37

Вставка содержимого буфера обмена в textbox
DllImport("user32.dll", SetLastError = true)] private static extern void keybd_event(byte bVk,...

Отловить изменение содержимого буфера обмена
здравствуйте, мой первый вопрос, поэтому если не в том разделе написал, прошу прощения. в...

Вставка содержимого буфера в Замещающий текст
Добрый день. Есть макрос в Ворде, который копирует подпись под рисунком и вставляет его в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru