Category: raspberry-pi

How to fix sound on the Raspberry Pi

How to fix sound on the Raspberry Pi

Raspi-config for Raspberry PiFirst I modded the code that inits sound to this:

	int success=Mix_OpenAudio(44000, AUDIO_F32LSB, 2, 8192);
	if (success==-1 ) {

		LogError2("InitSetup failed to init audio because %s",Mix_GetError());
	}

That extra call to Mix_GetError() returns a string saying what the problem is and in this case I got

ALSA : Couldn’t find any hardware audio formats.

ALSA is short for Advanced Linux Sound Architecture and Wikipedia is very informative. It certainly put some perspective on it.

 

Also I found this article adds a lot more information.  What fixed it though was doing

sudo raspi-config

Then pressing enter on 1. System Options and then S2 Audio and selecting the headphones option. Simple as that. After that asteroids played the sounds as expected.

There’s a lesson here which is to use the functions provided, in this case calling the Mix_GetError() function to show errors.  I added it into the PlayASound() call to see why it was failing, and it stopped doing it, i.e. it worked with lots of explosions on screen. I suspect it was the sound configuration hadn’t been properly set which is an issue with Raspberry Pis apparently.

Raspberry Pi Sound issues- trying to fix it

Raspberry Pi Sound issues- trying to fix it

Loudpeaker
Image by OpenClipart-Vectors from Pixabay

In working through my Linux/Raspberry Pi eBook(Yes – the second eBook!), I’m up to the chapter where sounds are introduced using the SDL_mixer library. And I’ve hit two sets of problems.

It sometimes refuses to initialize the sound code.  This code below hits the LogError line:

	int success=Mix_OpenAudio(22050, AUDIO_S16LSB, 2, 8192);
	if (success==-1 ) {
		LogError("InitSetup failed to init audio");
	}

The other day it was working but not today. Now I have updated the Pi’s code (sudo apt update etc) but I wouldn’t have expected that to break it. I’ve been looking on the internet and find the whole thing a bit complicated.

I’ve got my Pi running 64-bit Raspberry Pi OS. I’ve changed the output device to headphones which plug into the headphone socket. If I run the VLC media player and tell it to play into the headphones, it will happily play the .wav files I’ve got for the asteroids game.

But if I run speaker-test, a terminal application with this command line

speaker-test -c2 -twav -l7 plughw:1,0

I get

speaker-test 1.2.4

Playback device is default
Stream parameters are 48000Hz, S16_LE, 2 channels
WAV file(s)
Setting of hwparams failed: Invalid argument

By running this command:

aplay -L

I got 71 lines of output but of these these below are the most important

output
hw:CARD=Headphones,DEV=0
    bcm2835 Headphones, bcm2835 Headphones

and the speaker-test command using the device parameter –Dhw:Headphones now worked. I’ve highlighted the bits in the aplay output needed to identify the device.

The new command  is

speaker-test -c2 -twav -l7 -Dhw:Headphones

I can now hear a female voice saying front left then front right a few times in my headphones.

So my Pi’s sound device is working; I just have to figure why SDL_mixer isn’t always. I’ll keep looking.

And the second problem which only occurs when the mixer is working, is when you play a lot of sounds. The PlayASound() function checks the result. On Windows it never had a problem but on Raspberry Pi, when you blow up a lot of asteroids say at one time, it plays a number of explosions then returns an error for each explosion after that. I think there’s only so many channels; that’s an easy fix; just ignore the error and return as if it succeeded.

Networking fun with my Pi

Networking fun with my Pi

Networking
Image by Free-Photos from Pixabay

I lost my main internet for a week due to a power cut that left my main router in a funny state. It had to be factory reset then WiFi SSDs and passwords were reset. My office internet comes down a very long ethernet cable via two switches and a router. I had problems with my router and it got factory reset. Unfortunately I didn’t set this network up and didn’t realise that the network had two routers each doing DHCP and consequently it took a week to get things right. At one point I;d do a ping from my desktop PC and the answer would come back as IPV6, It was totally ignoring IPV4 requests, pings to domains with the -4 parameter were unreachable. Not a fun week.

My Pi which plugs into one of the switches and my desktop PC which also plugs onto the same switch would not talk. Both could see the internet but my Pi could not see Microsoft servers. I’d tried everything, even giving it a permanent IP rather than a DHCP but that can cause issues if the DHCP issues an IP address the same.

I do rather a lot with my PC and the Pi and having them networked is much more convenient than not. I use WinSCP for copying files and Putty if I need to connect in.

In the end, I bottled out and burnt the Raspberry Pi OS on a SD Card and booted from that. One hour later I’d installed all 295 updates and then installed VS Code.

 

Back on the Raspberry Pi

Back on the Raspberry Pi

Pi Asteroids DevelopmentIt has been a few months since I last used it and as you’d expect, it took a little bit of time and effort to get things back to what they were.

I’m pretty good about backing things up and it took about 30 minutes to burn a new SD Card, update it, install VS Code and the C/C++ extension, then copy my asteroids version over. I use WinSCP so had to enable SSH on the PI. It’s disabled by default but just tick a checkbox on the interface tab of the Preferences->Configuration menu.

Even then it didn’t compile. Of course I had to reinstall the dev versions of SDL, SDL_image, SDL_mixer and SDL_ttf and the clang compiler. Still it didn’t compile. I had created a Projects folder and created an Asteroids folder underneath that. I also had the Vs Code JSON files that you need for compiling C/C++. the main one of which is tasks.json. Those were in a folder .vscode which I had backed up but I’d copied it over into the wrong location. You want it located inside your VS Code folder.

This makes sense. If you have say five different projects then you are going to have a different build, link stuff per project. So you’ll have a unique .vscode in each folder. When you want to switch projects, you just close the Folder in the VS Code File menu and open it in the folder for the project that you next want to work on.

Mind you it still wouldn’t compile. It turned out my tasks.json has clang-6 in it. When I did a clang –version on it, it told me it was clang 7.0.1. So I upped it to clang-7 in tasks.json and that fixed it. It all compiled and ran.

Once you’ve done this a time or two it becomes 2nd nature but I can understand novices frustration; there are a lot of moving parts that all have to be right before you can even write and run C code. It’s not like other programming languages are really any better though. If you have setup virtual environments in Python and installed Python modules, you’ll know what it can be like.

 

When Raspberry Pi Goes wrong

When Raspberry Pi Goes wrong

Raspberry Pi TuxIt happened to me today, not once but twice.  First the Hyper-V version of Raspberry PI OS I have installed (handy for screenshots) didn’t update properly.  Apt got itself in a right state and attempts to fix broken packages on APT just made things worse. In the end, I fetched another copy from this page and installed that in Hyper-V and deleted the first one. I wonder if Raspberry PI OS will ever make it into the Microsoft Store as one of their WSL Linuxes?

At the same time I had forgotten to write down a login password for a real PI and burnt myself a new Pi SD CArd. After it did the initial update and reboot, it came up with BCM2835 Exception stack errors and hung. I burnt it again, went through the update palaver and it did the same. A quick Google and I found a suggestion that my SD Card was failing although it had burnt without error twice and switching to a different card fixed it.

Out of curiosity, I fired up Win32DiskImager and ran a verify against it and got this error message below. If you can’t read it says Verification failed at sector 8192. Well at least I now know and the SD Card was about to be binned and I took a last look at it.  4GB! I’d been burning a 7GB image onto it; no wonder it crashed.. I’m amazed it ever burnt and worked… I’d used it in the past for the DietPI distro which is much smaller.  Most of my spare SD Cards are 8 GB; that’ll teach me for not checking…

SD Card failed verification in Win32dioskimager

 

Restarting the Raspberry PI C Games tutorials

Restarting the Raspberry PI C Games tutorials

Raspberry Pi 4I believe that the Raspberry PI, especially the 4B is a great and very low cost machine for not only running games but for developing them as well. Of course, if you have a PC, Linux or Mac then you can use that as a development machine but if you haven’t, it costs less than £100 (when you count the system, case, cables, SD-Card) to get up and running.

So I’m reworking my original eBook for the Raspberry Pi, using software running on the Pi and developing a 2nd ebook. Along the way I’ll publish longer excerpts from it here. Probably one a week.

 

 

Visual Studio Code Now supports ARM

Visual Studio Code Now supports ARM

Visual Studio Code 1.50Which means it supports Raspberry Pi. Of course I’ve been using it thanks to the code.headmelted.com version but it’s convenient now that both 32-bit and 64-bit ARM are available to download from the official site. As always, make sure you pick the .deb version either ARM for the 32-bit Raspberry Pi OS or ARM 64 if you have the 64-bit.

Apparently there is also a new C/C++ extension from Microsoft that I shall have to check out as well.

Also this means you can do remote code development. The idea is that you run Visual Studio Code on your PC/Mac whatever and connect to a program running on your PI (over WifI or a Network cable) using SSH. See the VS Code documentation for remote development.

A spot of market research

A spot of market research

Raspberry-Pi
Image by Benjamin Nelan from Pixabay

This is market research for a side-project I’m working on. I’m developing a server and mobile clients to play multi-player games over WiFi. The server software would cost about $15/£12 and 1$ for the game client on Android/iOS. It will come with 8-10 games including card games such as Texas Holdem, and a board game or two. All games will be single-player as well (well not poker!). If it takes off I’d like to licence popular board games.

There will also be an SDK for creating new games and some financial arrangements for games to be sold through a “Pi bakery” i.e. app store. Games can either be included in the standard package or low cost add-ons.

I’m just trying to assess if there would be demand for it. If you have any comments or thoughts, I’ve posted this on the Raspberry Pi forums. as well.

It is often said that you shouldn’t give away ideas but I’ve decided to anyway. I really need to find out if anybody would buy this. If not then I have a plan B side-project waiting in the wings. But I do like this and I’ve already gone down the implementation route a bit.

Update

Sadly I have decided to ditch this side-project. I didn’t get great response; although there are 31 million Pis out there, getting people together especially with Covid is not easy. So I’m mothballing this for now. There is a B2B commercial possibility but I’ll come back to that in a year or two. Instead I am going onto my next project a mobile MMO.

Willing to take a Risc?

Willing to take a Risc?

One of the understated and wrong assumptions about the Raspberry Pi is that you can try any flavour of Linux on it but Linux is really the only OS.  It is true that most of the 20+ OSRISC Os that you can try are based on Linux but there are a few that aren’t.

  • Windows IOT Core – a limited version of Windows
  • Risc OS – Created by the inventor of ARM
  • RaspBSD – More Unix than Linux.
  • Chromium OS. Turn your Pi into a Chromebook.

Of these, I think Risc OS looks the most interesting. It certainly isn’t Linux and it reminds me of the Archimedes, the first ARM computer.

Risc OS is 33 years old, it started in Cambridge in 1987 and is a descendant of the BBC Micro OS. And yes they do have a BBC BASIC available.  There’s  lot more background to it on this page  but bear in mind that it and the comments date back to 2012. It has an  ARM C compiler called Norcroft.

I won’t be oing any more with Risc OS, but thought it worth a mention. All of the stuff I’m doing will be on Linux OS.

Not. ARM is in the news because Apple have just announced that they will be transitioning from Intel CPUs to ARM over the next year or two.

 

Raspberry Pi – a couple more tips

Raspberry Pi – a couple more tips

Cogs
Image by Arek Socha from Pixabay

I have my Pi networked via a switch to my main (Windows) PC. I use WinSCP or my PC for copying files both ways but it means I’m not using the Pi for periods of 15 or 20 minutes.

Unfortunately the default display timeout on the Pi is 10 minutes. It’s not a bad thing but I decided I wanted an hour.

This fix seems to work. It came from this page on the Raspberry Pi forums.  To save you the effort of reading through a few different suggestions, the one that worked for me is this in a terminal (From the answer at 1.02 am). The 3600 is the time period in seconds in case you hadn’t guessed!

Apparently there are two timeout mechanism hence two commands are needed.

xset s 3600
xset dpms 3600 3600 3600

You can view the settings with

xset q

However to make these settings permanent, you need to edit the file:

sudo nano /etc/xdg/lxsession/LXDE/autostart

That way they are set at boot time.

Note. I’m not really a fan of nano. From Ubuntu I’ve used gedit quite a bit and it is a visual full-screen editor, not line by line like nano. Yeah you could use VS Code if it were open but then on files where you have to use sudo, it’s easier to use gedit.

So

sudo apt install gedit

will install it. Just gedit or sudo gedit (for those awkward files!)