Comments (22)
I added an ALSA patch for L09A, try pulling changes and see if it does any change.
Also I bought one L09A, hopefully will arrive this week and I'll do some tests as well.
from xiaoai-patch.
Nice. everything went smoothly. docker worked very well without even an error thanks for that
I compiled all scripts and backed up all partitions but patched just partition mtd4 which was not active at that moment.
in u-boot instead, I just changed env variable using setenv boot_part boot0
and the board booted up with SSH enabled.
I had a problem using nc
to copy image back to the board so I used scp
on board and worked.
until now root password isn't working keys are confused and no audio, but wifi is ok
Root password seems to be changed. I cannot login to both serial and SSH.
It seems to be my fault for applying all patches.
from xiaoai-patch.
You may try changing the boot partition to previous one via Uboot: env set boot_part bootX; env save
. LX06 allows to change with buttons by pressing [-] volume button while booting (check that content in /init
file).
/etc/shadow password may be mounted on the ubifs partition and defaults to the same as in system (squashfs). I don't think password is tina
as in the old speakers...
from xiaoai-patch.
Now it's just a matter of testing the patches and scripts, prepare the full packages in Docker, then make clean, extract, patch and build.
Maybe some patches won't work because each speaker has different configuration, so I'd appreciate if you provide changes in PR :)
from xiaoai-patch.
Yes sure
mtd1-2-3.zip
mtd4 is 1.68.1 : https://drive.google.com/file/d/1DSmBLOmfniefIUYxb-19D2ea47yZIciL/view?usp=sharing
mtd5 is 1.64.4 : https://drive.google.com/file/d/1VDFZHQoylkb06dHGc8izldiDLo0clQgb/view?usp=sharing
from xiaoai-patch.
Recovery key code seems to have changed. After power on, instead of just pressing the [-] button, you need to keep pressing [-], then confirm with pressing [+] within two seconds, otherwise it continues normal booting and Red LED turns off.
- I cannot confirm the actual value of this buttons, but I think these are the right ones. Similar to the Google factory reset.
Regarding password magic, in old version there's still the mi_console
so you can generate the password hash with it.
New firmware contains an MD5 password, I'll try to see if I can recover it...
from xiaoai-patch.
Password authentication comes from /lib/security/libmico-pam.so
and /etc/pam.d/common-auth
, it is also forced in sshd auth login. Lib also contains a public DSA key... Sounds interesting, but I'd rather remove it instead of investigating further. 😂
So in order to unlock you, maybe you can try setting the Uboot bootargs
to run /bin/sh
with serial cable, and having a functional shell in there, update the /data
shadow password.
from xiaoai-patch.
Just got my L09A, my version is 1.54.10
, way too "old" than yours - 2020-06-16 lol
Let me do some tests and I'll try to update shortly!
from xiaoai-patch.
BTW - swap boot partition buttons are [-] and [Play].
from xiaoai-patch.
Ok, first of all do a backup of flash memory and store it in two different places (just ensure don't lose the original files).
pc# for N in $(seq 0 6); do ncat -vlp 8888 > mtd${N}; done
mico# for N in $(seq 0 6); do dd if=/dev/mtdblock${N} | nc YOUR_COMPUTER_IP 8888; done
Clone this repo to your computer, on patches
folder delete all files except 10_ssh.patch
, on scripts
folder delete all files except:
00_start.sh
10_apply_patches.sh
94_copy_bin.sh
99_end.sh
No need to run packages.sh
at the moment, we want to ensure this patching works, so this basic changes should just enable SSH login and copy few scripts.
Next, by logs it shows that the current boot is boot0
, hence you're using mtd2
(boot0) and mtd4
(system0).
Since you say you have the other version 1.64.4 available, it means mtd3
(boot1) and mtd5
(system1) are not empty. Check file xxd mtd3 | less
and see if it has content or not (all FF FF).
You may want to keep this lower version for the moment since it's not very protected, but you can test whichever you want, it will be used to patch and pack.
So assuming we use mtd5 (which should be 1.64.4):
sudo make extract FILE=mtd5
sudo make patch
sudo make build
This will generate a new squashfs image in release
folder, check the type is exactly the same:
file mtd5 release/image-*
binwalk mtd5 release/image-*
With the squashfs-root
folder, ensure the SSH service is patched to allow running the service.
Otherwise you can manually change the file/s and run sudo make build
again.
We want to ensure compression and blocksize is equal (defaults compression xz and blocksize 131072 bytes).
If blocksize is 262144
bytes, then run:
sudo make build MODEL=lx01
If L09A behaves similar to LX06, then you should be able to run this:
fw_env -g boot_part
And this would return boot0
- your current boot.
Change to boot1
and reboot.
df # check current mtdblock partition
fw_env -s boot_part boot1
sync
reboot
Upon reboot check if the root partition changed with df
again.
Last, in order to flash the content:
We want a copy of the current boot mtd3
to the other boot partition mtd2
, to use same kernel.
dd if=/dev/mtdblock3 of=/dev/mtdblock2 bs=4096
Let's flash the patched image and check we have SSH working and enabled!
Remember you have to flash the system partition that is not in use, so if currently you're using mtd5
, we want to flash mtd4
.
pc# ncat -vlp 8888 < release/latest
mico#
nc YOUR_COMPUTER_IP 8888 > /tmp/update.img
dd if=/tmp/update.img of=/dev/mtdblock4 bs=4096
fw_env -s boot_part boot0
sync
reboot
If all went successfully, you should have the new content available.
Remember to have Uboot available in emergency case to change the misc / environment values.
from xiaoai-patch.
Solved.
I dont know but may have patched newer firmware (1.68.1) by mistake and because of that magic number thing ssh password didn't work. but it didn't spit that magic number.
now I did everything again and have SSH access.
i think my next step would be geting rid of that chinese voice in the speaker
Thanks man
from xiaoai-patch.
ok after some playing around:
there are lots of differences in L09A, just SSH patch works fine .
it maybe because of different firmware versions.
tried many changes in scripts but no luck and in all situations after patching i cannot login and volume + button brings orange light. I can't find out what happened to shadow file that doesn't let me login.
from xiaoai-patch.
@mah8050 if you can share with me the mtd partitions except mtd6
(data) I may try do some checks from code available. I've ordered another Xiaoai Art Speaker - hopefully it is not updated and I can test as well physically.
from xiaoai-patch.
but I simply copied shadow file from /etc/shadow of working one into patched files and solved
and after running df
I understood where the problem was.
in working one I have:
root@L09A:/etc# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mtdblock4 28544 28544 0 100% /
tmpfs 59308 1152 58156 2% /tmp
tmpfs 512 0 512 0% /dev
/dev/ubi0_0 13760 1888 11132 15% /data
/dev/ubi0_0 13760 1888 11132 15% /etc/shadow
and in pached one which is now booted into I have:
root@L09A-9738:/etc/init.d# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mtdblock5 38528 38528 0 100% /
tmpfs 59308 100 59208 0% /tmp
tmpfs 512 0 512 0% /dev
/dev/ubi0_0 13760 1948 11076 15% /data
See the last line is not mounted, which seems to be a symlink to somewhere hidden in data partition
from xiaoai-patch.
After some days I had time to work on the speaker again.
The first and most important is that ALSA records faster and with higher pitch so porcupine and speak to text are not able to recognize voice.
it's about 3 times faster than normal
what I know about it till now is that aplay
command works normally, it can play any other voice like normal
but with arecord
or even ffmpeg
there is a problem in recording that leads to voice being recorded faster than normal
I've tried any configuration and any bit rate and no difference.
do you have any solution?
I tested the word alexa
, by recording 'Alexa' on my phone and playing back in 1/3x with lower pitch and it worked!
PS: Is it possible for you to send me example of config files that are placed on /data partition?
from xiaoai-patch.
If you check /etc/asound.conf
, you'll see a lot of PCM devices.
Default playback audio passes through dtsaudio
> dtsladspa
filter and finally plays at dmixer
with hardware hw:0,2
.
Microphone on the other way is mico_record
, which records in noop
and finally to hardware hw:0,3
.
I remember also having this problem but I'm not sure if it was because of the speaker which did this conversion, or the microphone. Can you share the command you're using to record audio? You should be recording by using -D mico_record
.
Also, did you try the following patches?
patches/24_alsa_change_default.patch
patches/25_alsa_remove_dts.patch
/data
files are for Xiaoai and other program config (MPD, Upmpdcli) and also to customize the scripts to listen (KEY=value) if you want to change to other values, not really used for ALSA, although you can copy the asound.conf
file and do mount --bind
to apply that customized file to read-only /etc
partition.
from xiaoai-patch.
Record using this command:
arecord -N -D mico_record -d 5 -f S16_LE -c 8 -r 16000 /tmp/rec.wav
And also tried:
ffmpeg -i mico-record -f wav -ac 1 -ar 16000 -y /tmp/rec.wav
This is my asound.conf
------------------------------------------------
root@L09A-9738:~# cat /etc/asound.conf
pcm.!default {
type asym
playback.pcm "general"
capture.pcm "mico_record"
}
pcm.general {
type plug
slave {
pcm {
type softvol
slave.pcm dmixer
control{
name "mysoftvol"
card 0
}
min_dB -51.0
max_dB 0.0
}
channels 2
format S16_LE
rate 48000
}
}
pcm.bluetooth {
type plug
slave {
pcm {
type softvol
slave.pcm dmixer
control{
name "bluetooth"
card 0
}
min_dB -51.0
max_dB 0.0
}
channels 2
format S16_LE
rate 48000
}
}
pcm.notify {
type plug
slave {
pcm {
type softvol
slave.pcm dmixer
control{
name "notifyvol"
card 0
}
min_dB -51.0
max_dB 0.0
}
channels 2
format S16_LE
rate 48000
}
}
pcm.dtsaudio {
type plug
slave.pcm "dtsladspa"
}
pcm.dtsladspa {
type ladspa
slave.pcm plug:dmixer
channels 2
path "/usr/lib/"
playback_plugins [{
label dts_process
input {
controls [4]
}
}]
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,2"
format S16_LE
period_size 1920
buffer_size 7680
rate 48000
}
bindings {
0 0
1 1
}
}
ctl.dmixer {
type hw
card 0
device 1
}
pcm.dsp {
type plug
slave.pcm "dmixer" # use our new PCM here
}
ctl.mixer {
type hw
card 0
}
pcm.dis {
type plug
slave.pcm noop
}
pcm.mico_record {
type plug
slave.pcm noop
}
pcm.noop {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,3"
format S32_LE
rate 48000
channels 8
period_size 4096
}
}
defaults.pcm.rate_converter "speexrate_medium"
root@L09A-9738:~#
from xiaoai-patch.
Ok, in that case seems that the default device should be mico_record.
Maybe the problem is the playback command itself. You're recording at 16k, while playing at 48k (1/3) .
Did you check if the audio recorded sounds ok in your computer?
Does other audio playback have this same issue? With mpd
or mpg123
?
from xiaoai-patch.
Yes I copied recorded file from device to my pc and it's recorded in 3x speed
I've tried all kinds of different settings but no luck
Even tried recording in 48k and nothing changed
I'm sure it's record problem, not playback problem.
When I use -d 5
in record command line to indicate record duration instead of 5 seconds the record takes 15 seconds to end!
from xiaoai-patch.
applied the patch to asound.conf
and no difference, but just after reducing channel count to 4 in asound.conf
everything is normal again
change from:
pcm.noop {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,3"
format S32_LE
rate 48000
channels 8
period_size 4096
}
}
To:
pcm.noop {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,3"
format S32_LE
rate 48000
channels 4
period_size 4096
}
}
I think there may be a hardware thing like buffering or file system problem.
but with this change me and porcupine are happy :))
PS: when listener
service is running the problem appears again even with channel count 4
and some extra info here:
again I've changed asound.conf
due to gettin 'snd_pcm_readi' failed with 'Broken pipe'
error randomly
pcm.noop {
type dsnoop
ipc_key 1024
slave {
pcm "hw:0,3"
format S32_LE
rate 16000
channels 4
period_size 4096
}
}
from xiaoai-patch.
a67d3b3
now this works :)
from xiaoai-patch.
Confirmed. 💯
from xiaoai-patch.
Related Issues (20)
- Information gathering for voice assistant implementation via porcupine and vosk HOT 10
- [Workaround] hardcoded wifi mac address is used for LX01 HOT 3
- Xiaoai Speaker Play - L05B HOT 19
- Hack into my new LX06 HOT 26
- wget2: certificate verify failed HOT 1
- mpd: Input latency for AUX input HOT 2
- Build for package 'sndio' not completed HOT 2
- AS05G HOT 15
- Docker container exits with error "Build for package 'glibc' not completed" HOT 5
- I tried to connect procupine to MQTT, but failed.
- L09G HOT 60
- bluealsa-aplay v4 not working HOT 1
- `porcupine_launcher` does not work with recent Home Assistant HOT 1
- Trying on L09b Xiaoai Art Battery HOT 10
- Good smart speaker with good sound quality and easy to flash? HOT 3
- LX06 network configuration HOT 3
- TLS issue with listener due to not current date HOT 1
- remote firmware update HOT 2
- Lx01 HOT 6
- How do you Open LX01? There are no screws. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from xiaoai-patch.