LeJOS: відтворення звуку у Mindstorms EV3 1


Ще одна цікава і корисна річ, на яку здатен Mindstorms EV3: відтворення звуку через вбудований динамік. Корисна, бо робота можна навчити навіть говорити, але поки ми не збираємося цього робити, а обмежемося базовими речами 🙂

Отож, відтворення звуків у Mindstorms EV3 можна розглядати у двох іпостасях: відтворення тонів чи нот і відтворення звукових файлів (підтримуються тільки нестиснені PCM файли, з моно-звуком у частотном діапазоні від 8 до 48кілогерц, 8-bit або 16-bit). Файл береться безпосередньо з пристрою EV3, тож попередньо його слід завантажити туди за допомогою EV3 Control Center:

EV3 Control Center

Якщо з файлами все просто, то для відтворення тонів чи нот необхідно знати яка частота відповідає кожній ноті. Особисто я від музики досить далекий, тому просто загуглив частоти для нот і вибрав 7 нот однієї октави для прикладу: звичайне собі до-ре-мі-фа-соль-ля-сі.

import java.io.File;
import lejos.hardware.Button;
import lejos.hardware.Sound;

public class SoundTest {
	public static void main(String[] args) {
		System.out.println("EV3 Sound test");
		int keys = 0;
		while (keys != 2) {
			Button.waitForAnyPress();
			keys = Button.readButtons();
			int doN = 261;
			int reN = 293;
			int miN = 329;
			int faN = 349;
			int soN = 392;
			int laN = 440;
			int siN = 493;

			Sound.playTone(doN, 100);
			Sound.playTone(reN, 100);
			Sound.playTone(miN, 100);
			Sound.playTone(faN, 100);
			Sound.playTone(soN, 100);
			Sound.playTone(laN, 100);
			Sound.playTone(siN, 100);

			Sound.playNote(Sound.FLUTE, siN, 100);
			Sound.playNote(Sound.FLUTE, laN, 100);
			Sound.playNote(Sound.FLUTE, soN, 100);
			Sound.playNote(Sound.FLUTE, faN, 100);
			Sound.playNote(Sound.FLUTE, miN, 100);
			Sound.playNote(Sound.FLUTE, reN, 100);
			Sound.playNote(Sound.FLUTE, doN, 100);
			// File should be uploaded to the brick before playing
			// Sound.playSample throws no exception but returns error code
			System.out.println(Sound.playSample(new File("sample.wav"), 100));
		}
		System.out.println("Press and release ESCAPE");
		Button.ESCAPE.waitForPressAndRelease();
	}
}

Виникає резонне питання про різницю між тонами і нотами (та, відповідно, між PlayTone() і PlayNote()). Якщо у двох словах, то для нот у інтерфейсі Sound є кілька заготовок “інструментів”, які звучать наче більш природньо:

public final static int[] PIANO = new int[]{4, 25, 500, 7000, 5};
public final static int[] FLUTE = new int[]{10, 25, 2000, 1000, 25};
public final static int[] XYLOPHONE = new int[]{1, 8, 3000, 5000, 5};

Звісно ж, можна оголосити і власні, поекспериментувати з налаштуваннями… Одним словом, простір для творчості є 🙂

Почитайте ще оце:


Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Думка на тему “LeJOS: відтворення звуку у Mindstorms EV3