Compare commits

..

8 Commits

Author SHA1 Message Date
Peli de Halleux
4bea8e8712 1.2.31 2020-10-02 23:14:18 +02:00
Peli de Halleux
0af6182f23 enable french (stable1.2) 2020-10-02 23:14:07 +02:00
peli
398e53bae4 updated released version to 1.2.30 2020-09-20 23:45:56 -07:00
peli
33e6372bf0 1.2.30 2020-09-10 23:42:19 -07:00
Maciej Mroziński
83bba14a4d Change timeout 1s -> 5s to reduce Timeout errors (#988) 2020-09-10 23:42:10 -07:00
Maciej Mroziński
0d7c1f0d50 Read default volume from device settings at start (#987) 2020-09-09 12:07:45 -07:00
peli
623e57a30e 1.2.29 2020-09-08 23:56:34 -07:00
Maciej Mroziński
91235fb6d3 Change sound volume to level (#986) 2020-09-08 23:55:35 -07:00
10 changed files with 5180 additions and 10 deletions

View File

@@ -1,3 +1,3 @@
{
"appref": "v1.2.22"
"appref": "v1.2.30"
}

View File

@@ -116,7 +116,7 @@ export class Ev3Wrapper {
if (this.dataDump)
log("TALK: " + U.toHex(buf))
return this.io.sendPacketAsync(buf)
.then(() => this.msgs.shiftAsync(1000))
.then(() => this.msgs.shiftAsync(5000))
.then(resp => {
if (resp[2] != buf[2] || resp[3] != buf[3])
U.userError("msg count de-sync")

View File

@@ -12,4 +12,5 @@ music.setTempo(120)
music.noteFrequency(Note.C)
music.beat()
music.setVolume(50)
```
music.volume()
```

View File

@@ -13,7 +13,22 @@
namespace music {
uint8_t currVolume = 50;
int _readSystemVolume() {
char ParBuf[8];
int volume;
int fd = open("../sys/settings/Volume.rtf", O_RDONLY);
read(fd, ParBuf, sizeof(ParBuf));
close(fd);
if (sscanf(ParBuf,"%d",&volume) > 0) {
if ((volume >= 0) && (volume <= 100)) {
return volume;
}
}
return 50;
}
uint8_t currVolume = _readSystemVolume();
uint8_t *lmsSoundMMap;
int writeDev(void *data, int size) {
@@ -37,6 +52,18 @@ void setVolume(int volume) {
currVolume = max(0, min(100, volume));
}
/**
* Return the output volume of the sound synthesizer.
*/
//% weight=96
//% blockId=synth_get_volume block="volume"
//% parts="speaker" blockGap=8
//% help=music/volume
//% weight=1
int volume() {
return currVolume;
}
#define SOUND_CMD_BREAK 0
#define SOUND_CMD_TONE 1
#define SOUND_CMD_PLAY 2
@@ -45,7 +72,7 @@ void setVolume(int volume) {
struct ToneCmd {
uint8_t cmd;
uint8_t vol;
uint8_t lvl;
uint16_t freq;
uint16_t duration;
};
@@ -55,10 +82,26 @@ static void _stopSound() {
writeDev(&cmd, sizeof(cmd));
}
static uint8_t _getVolumeLevel(uint8_t volume, uint8_t levels) {
uint8_t level;
uint8_t step = (uint8_t) (100 / (levels - 1));
if (volume < step) {
level = 0;
} else if (volume > step * (levels - 1)) {
level = levels;
} else {
level = (uint8_t) (volume / step);
}
return level;
}
static void _playTone(uint16_t frequency, uint16_t duration, uint8_t volume) {
// https://github.com/mindboards/ev3sources/blob/78ebaf5b6f8fe31cc17aa5dce0f8e4916a4fc072/lms2012/c_sound/source/c_sound.c#L471
uint8_t level = _getVolumeLevel(volume, 13);
ToneCmd cmd;
cmd.cmd = SOUND_CMD_TONE;
cmd.vol = volume;
cmd.lvl = level;
cmd.freq = frequency;
cmd.duration = duration;
// (*SoundInstance.pSound).Busy = TRUE;
@@ -122,7 +165,8 @@ void playSample(Buffer buf) {
stopUser();
pthread_mutex_lock(&pumpMutex);
*lmsSoundMMap = 1; // BUSY
uint8_t cmd[] = {SOUND_CMD_PLAY, (uint8_t)((currVolume / 33) + 1)};
// https://github.com/mindboards/ev3sources/blob/78ebaf5b6f8fe31cc17aa5dce0f8e4916a4fc072/lms2012/c_sound/source/c_sound.c#L605
uint8_t cmd[] = {SOUND_CMD_PLAY, _getVolumeLevel(currVolume, 8)};
writeDev(cmd, 2);
decrRC(currentSample);
currentSample = buf;
@@ -201,4 +245,4 @@ Buffer buffer(Sound snd) {
void play(Sound snd) {
music::playSample(snd);
}
}
}

10
libs/music/shims.d.ts vendored
View File

@@ -13,6 +13,16 @@ declare namespace music {
//% weight=1 shim=music::setVolume
function setVolume(volume: int32): void;
/**
* Return the output volume of the sound synthesizer.
*/
//% weight=96
//% blockId=synth_get_volume block="volume"
//% parts="speaker" blockGap=8
//% help=music/volume
//% weight=1 shim=music::volume
function volume(): int32;
/**
* Play a tone through the speaker for some amount of time.
* @param frequency pitch of the tone to play in Hertz (Hz), eg: Note.C

View File

@@ -5,3 +5,4 @@ music.playTone(1440, 500)
pause(500)
music.playTone(2440, 500)
pause(500)
music.volume()

5105
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "pxt-ev3",
"version": "1.2.28",
"version": "1.2.31",
"description": "LEGO MINDSTORMS EV3 for Microsoft MakeCode",
"private": false,
"keywords": [

View File

@@ -108,7 +108,8 @@
"de",
"ja",
"ru",
"zh-CN"
"zh-CN",
"fr"
],
"highContrast": true,
"lightToc": true,

View File

@@ -7,6 +7,14 @@ namespace pxsim.music {
export function stopAllSounds() {
SoundMethods.stop()
}
pxsim.music.setVolume = (volume: number): void => {
pxsim.getAudioState().volume = volume;
};
export function volume() {
return pxsim.getAudioState().volume;
}
}
namespace pxsim.SoundMethods {