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

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

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

Показать сообщение отдельно
КАВ
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 и как одновременно воспроизводить несколько звуков. Заранее благодарю всех за помощь.
 
Текущее время: 08:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru