Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Генератор звукового сигнала - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Задать таймаут перед разрывом блютуз соединения http://www.cyberforum.ru/android-dev/thread1792492.html
Привет! Товарищи, подскажите как реализовать возможность разрывать bluetooth соединение между двумя девайсами после определенного времени. К примеру два девайся оказались на недопустимом расстоянии...
Программирование Android Клавиатура. Как можно упростить использование? Появилось несколько вопросов по клавиатуре. 1) Можно ли сделать программное нажатие кнопки на клавиатуре? А именно микрофон (распознавание речи) То есть чтобы например по клику в edittext сразу... http://www.cyberforum.ru/android-dev/thread1792471.html
Программирование Android SQlite + курсор + ориентация
Всем добрый вечер. Хотя не совсем добрый (для меня). Уже два часа безрезультатно пытаюсь решить проблему. Если в двух словах: вылетает прога, когда я меняю ориентацию экрана. Весь код...
Тестирование отображения UI Программирование Android
Здравствуйте, интересует есть ли какой ресурс для быстрого тестирования UI Android-приложений, ибо у меня на разных экранах Views по разному отображаются.
Программирование Android Проигрывание двух звуков по порядку http://www.cyberforum.ru/android-dev/thread1792293.html
В приложении в MediaPlayer загружаю два звука, но они проигрываются одновременно. Как сделать так, чтобы второй звук проигрывался только после первого?
Программирование Android Анимация следующая за свайпом Имеется 3 элемента RecyclerView: 1 слева(якобы за экраном), 1 в центре(видимый) и 1 справа(тоже за экраном). Требуется сделать так, чтобы при свайпе был эффект скольжения. Например, если свайп справа... подробнее

Показать сообщение отдельно
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
23.11.2016, 12:52
Здравствуйте. 1. Гармоники возникают при использовании прямоугольной волны.
2. Спасибо Вам за идею,как убрать щелчки,но вроде с амплитудой у меня всё в порядке. Хотя полностью согласен с Вами,что без кода тут трудно что-то подсказать,поэтому ниже будет код моего класса,который генерирует звук по синусоидальной волне.
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
32
class beeper {
public static short[] sample;
public static AudioTrack audioTrack;
public static void createAudioTrack() {
if(audioTrack==null) {
audioTrack=new AudioTrack(AudioManager.STREAM_MUSIC,48000, AudioFormat.CHANNEL_OUT_STEREO,AudioFormat.ENCODING_PCM_16BIT,sample.length*(Short.SIZE / 8), AudioTrack.MODE_STREAM,AudioTrack.STATE_INITIALIZED);
if(Build.VERSION.SDK_INT<21 ) audioTrack.setStereoVolume(AudioTrack.getMaxVolume(),AudioTrack.getMaxVolume()); else audioTrack.setVolume(AudioTrack.getMaxVolume());
}
}
private static short getSquareSignalPerTact(int tact ,double freqHz,double mPhase) {
// Используется для генерации звука с помощью прямоугольной волны,но я не использую этот метод,из-за проблемы,о которой я писал выше.
return Math.sin(mPhase+(2 * Math.PI * tact / (((double) 48000)/ freqHz))) < 0 ? Short.MIN_VALUE : Short.MAX_VALUE;
}
static void sound(double frequency,double durationMs) {
sample = new short[(int)(2*48000*durationMs/1000)];
for (int i = 0; i < sample.length; i+=2) {
sample[i] = (short) (Math.sin(2* Math.PI * i / (48000/frequency))*0x7FFF);
sample[i+1] = (short) (Math.sin(2* Math.PI * i / (48000/frequency))*0x7FFF);
}
createAudioTrack();
audioTrack.play();
audioTrack.write(sample, 0, sample.length);
}
public static void audioTrackdestroy() {
    if (audioTrack != null) {
audioTrack.stop();
audioTrack.flush();
audioTrack.release();
audioTrack = null;
}
}
}
Так как в классе MainActivity используется генерация звука только в одной кнопке,далее будет её код. переменные a,b,steppchange и result типа double,а также thread и другие переменные объявлены в начале класса. Во избежании неточности при вычислении значений функции x*x,которая связана с ошибками округления в типе double,я округляю полученное значение до 4-х знаков. Чтобы избежать тормозов,я обернул мой код,который генерирует звук,в thread.
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
public void button0 (View view) {
try {
a=Double.valueOf(edit1.getText().toString());
b=Double.valueOf(edit2.getText().toString());
canbuildfunction=true;
}
catch (NumberFormatException e) {
canbuildfunction =false;
show(getString(R.string.NumberFormatException));
}
if(canbuildfunction) {
if(a<b) steppchange=0.1; else if(a>b) steppchange=-0.1; else steppchange =0;
thread=new Thread(new Runnable() {
@Override
public void run() {
while((a<b && steppchange>0) || (a>b &&steppchange<0)) {
build=true;
a=new BigDecimal(a).setScale(4, BigDecimal.ROUND_HALF_DOWN).doubleValue();
result=new BigDecimal(a*a).setScale(4, BigDecimal.ROUND_HALF_DOWN).doubleValue();
if(canbuildfunction && result>=0) beeper.sound(result+100,200); else if(canbuildfunction &&result<0) beeper.sound(result-100,200);
show(getString(R.string.x)+a+","+getString(R.string.y)+result);
a+=steppchange;
}
}
});
}
}
3. Подскажите пожалуйста,если знайте,как управлять балансом в audiotrack и как одновременно воспроизводить несколько звуков. Заранее благодарю всех за помощь.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru