# Hello Angrezi!

Welcome to the base of knowledge, the wiki or documentation.

## What is Radio Angrezi?

Angrezi is an **experimental community radio** based at the [University of the Arts Bremen](http://hfk-bremen.de/). The collective is involved with themes of voice, sound, silence, media, transmission, collaboration and space.

As of now (2020) there is no fixed (conceptual) definition the project. But, naturally, you can find quite some existing (pre-)conditions, (shared) experiences, and material infrastructures, that actually do define the project.

The latter is documented here in this wiki. Have a look in the **sidebar to find topics and guides**.\
Scroll down on this page, to find more **about the wiki** itself and your invitation to **contribute**.

**This is an open wiki. Please feel invited and contribute.**

To quote the studio windows inscription:

> Angrezi is an experimental community radio.\
> Angrezi creates space and time.\
> Angrezi features sound, music, voice and live performance.\
> Angrezi is made here and on unknown territories.\
> Angrezi is listening to silence, noise and ambience – to music, poetry and conversation.\
> Angrezi are listeners, musicians, performers, speakers, engineers, organisers and activists.\
> Angrezi tries and fails, is invitation and exhaustion.\
> Angrezi can be silent and it will be loud.\
> Angrezi is now or never.\
> Angrezi speaks many languages.\
> Angrezi calls in and seeks out.\
> Angrezi celebrates collectivity and sound.\
> \
> Angrezi loves you.\
> Because you fuck\*ing deserve it.
>
> The studio is usually open during live broadcasts and for the bi-weekly plenum.\
> &#x20;Interested in broadcasting, performing, supporting, mixing or just hanging out? Join one of the introduction workshops and regular BARADIO nights.
>
> Recieve Angrezi always live on radioangrezi.de and occasionally on 92,5 FM. Join the live ticker on t.me/radioangrezi to get notified of the next broadcast.
>
> <radioangrezi@hfk-bremen.de>\
> 0421 9595-1212

## What can I find in this wiki / this documentation?

The goal of this wiki / this documentation is to share practical knowledge in the group and to document structures for later reference, or for new people later on.

Beside the wiki you find a lot of files and documents on our [Sharepoint](https://hfkbremen.sharepoint.com/sites/angrezihq/) and sound files and recordings on our own [Server](http://server.radioangrezi.de/). But for now, the wiki is a **good place to get started**.

### What does belong in the wiki? What could you find here?

* Notes on how the project and the plenum works.
* How to get started, when joining the project.
* What do do, when you leave (or take a break).
* "End-user" documentation for broadcasting, our studio, the server etc.
* Technical (administrative) documentation of all technical infrastructures
* Links to all tools we use (in the sidebar)
* Video tutorials or step-by-step guides

### What does not belong in the wiki?

* Temporary notes, meeting protocols (aka. minutes)
* Dates, Events and Workshop announcements
* Passwords
* Other sensitive data (this wiki is **public to the internet**)
* Personal / Individual notes
* Things that *nobody can understand*
* Contributes that a knowingly wrong and outdated

## How ask a question or contribute to the documentation?

**Yes**, you can contribute and you should! The collective effort of Angrezi makes it actually necessary that all involved people contribute, by

* writing or updating content
* asking questions
* addressing that something is wrong or not working as described
* addressing that something is outdated or not practised any more in the described way
* etc.

**Please contribute.**

There is no danger of doing anything *wrong*. All versions of pages in the wiki are stored permanently on [GitBook](https://app.gitbook.com/@radioangrezi/s/docs/), in the background. So you can edit whatever you like. Feel free! 🙂

If you have any questions regarding the wiki itself or some technical infrastructures please write to: <tech@radioangrezi.de>. To email the plenum please write to: <ra-hq@radioangrezi.de>.

Cheers!


# How to join Radio Angrezi?

Generally there is no fixed procedure of joining the Angrezi collective. But historically some practices proved to be quite effective:

* **Join one of our BARADIO evenings**: Since BARADIO is organized by Members of Radio Angrezi there is a good chance to meet one of us and get to know each other. With some luck you already learn about our structures and how you can produce your own broadcast.
* **Organize your own broadcast:** Learning by doing is the core of this school. And this also counts for Radio Angrezi. Think of you own broadcast and send us the filled out [Production Proposal](https://hfkbremen.sharepoint.com/:b:/s/angrezihq/Ecj25U8s_eFLgP5CZ0spuUcBvzkoYRVwZP2L9t8SmYRexg?e=fWcMOT). Don't worry, we will help you with each step.
* **Ask for a Studio Introduction:** We regularly organize a Studio Introduction so you get the chance to learn about all the organizational and technical details about the studio. Sometimes we do this together as a group, sometimes individually.
* **Join organizing a collective Event:** We regularly organize bigger Events such as Concerts or Partys. In such cases we often ask for support of students. Taking a bar-shift or helping setting up and cleaning is a great way to enter the collective.&#x20;
* **Be creative:** What do you want to do in the radio? Broadcast your poems? Repaint a wall? Organize a Rave? Rebuild the entire server structure in an 5-day-hackathon-bender? Getting to work with a specific plan generally helps to get started.

After following those Steps there is pretty good chance that you're already part of the team and developing the project.

Jus as a reminder: Whatever creative way you choose to get in touch with the project. We're happy to welcome you. Even though we sometimes miss your mails...&#x20;


# Plenum

The Plenum is the central organizational Organ of Radio Angrezi and discusses various organizational topics, such as:

* Request regarding Productions
* Technical Issues
* Collaborations
* General Developments of the Radio
* Communication
* Financial Issues
* Collective Productions such as Partys, Concerts, Broadcast Series etc.

The Plenum is not the Place to discuss:

* Individual Broadcasts
* Content of Broadcasts
* Organisational Topics concerning individual Productions
* General privat Issues.&#x20;

Currently the Plenum takes place bi-weekly. The Invitation is send out via the Angrezi-Crew Telegram Group. If you wish to join the Plenum feel free to write to <radioangrezi@hfk-bremen.de> or ask the next person you find in the studio.

Be aware: The Plenum is good opportunity to learn about the structures of the Radio and get to know the Crew behind it. At the same time discussions in the Plenum can become tiring and not every issue can be dealt in detail since many problems and questions rise again and again.


# Communication (between us)

Currently there is a Telegram Group of everyone involved in the radio.

There is also a Network-Chat for Producers who are associated with Radio Angrezi.

There are also Detailed Mailing Lists concerning every Department (e.g. Tech) - But the Mailing Lists are not used since a while. Maybe it's time to reactivate them, since E-Mail is still a cutting edge open communication protocoll and less platform-bound than Telegram, WhatsApp etc....


# Channels

We have a Telegram Channel which announces all Shows.

We have a Instagram Page which announces all Shows.

We use the E-Mail Lists of HfK to announce all Shows.&#x20;

Should we get rid of something? Should we invent our own HfK-Social-Media? Is the radio the Social-Medium of HfK by itself?


# Studio Space

Houserules of Castel Angrezi

The Angrezi Studio is the home base for an experimental and collective practise for around 20 – 50 people. A core crew of 5 – 10 is keeping things together, take a lot of care to prepare this room and provide the infrastructure to share time and space and work collaboratively. Here are the most obvious rules everybody should respect.&#x20;

* Please don’t smoke inside of the studio. Obviously.&#x20;
* Tidy up after using the studio. Take responsibility for a nice space for all Angrezis.&#x20;
* Wash your dishes and keep the kitchen tidy. Put on the dish washer on if you can and put all things inside (also including cups and glasses from other friendly Angrezis.)&#x20;
* If the trash bin is full please bring it outside. \
  (paper container: in front of the HfK entrance, trash: behind the Mensa)&#x20;
* You can drink coffee, beer and limo based on donation. \
  No money, no future drinks. We recommend a donation of 2€ since we all forget to pay once in a time.&#x20;
* You need to have an intro workshop and do a pilot broadcast to do engineering and get key access to the studio.&#x20;
* The equipment in the studio belongs in the studio. Do not steal the equipment. – Write an e-mail to <tech@radioangrezi.de> if you still do so.&#x20;
* Put cables, microphones, headphones and production gear back in its place after use.&#x20;
* If you have issues or something breaks, please let the tech crew (<tech@radioangrezi.de>) know.&#x20;

*The space is the place.* 🛸🛸

You'll find a [printout version](https://hfkbremen.sharepoint.com/:w:/r/sites/angrezihq/Freigegebene%20Dokumente/Room/Houserules%20Angrezi%20Studio.docx?d=w304368d8dfd94760b76d02e791ea0d5c\&csf=1\&web=1\&e=TRu6eG) of these rules on our Sharepoint along with [other files about the space](https://hfkbremen.sharepoint.com/:f:/r/sites/angrezihq/Freigegebene%20Dokumente/Room?csf=1\&web=1\&e=sSzSrh). There you can also find an agreement on the studio [key access](https://hfkbremen.sharepoint.com/:w:/r/sites/angrezihq/Freigegebene%20Dokumente/Room/Bedingungen%20f%C3%BCr%20Schlie%C3%9Fberechtigung.docx?d=w217fdab7dbe34356b100c6319f59fe2a\&csf=1\&web=1\&e=04vSyV) with the schools administration.

All **technical things about our studio** is documented on a [separate page in this wiki](/tech-deep-dive/studio-xi).


# How to leave?

This is a hard one. Figure it out by yourself...


# Step-by-Step form Home

special corona edition

## Send proposal and show info to Plenum

Minimum info for a broadcast:

* Your name
* Your phone number + E-Mail
* Show title
* Show description (\~ 250 characters)
* Date, time and duration

If you did not agree with your plenum contact person on anything else, **email this info** to <radioangrezi@hfk-bremen.de>.

This info will be put on the [Angrezi website](http://radioangrezi.de/), the [mailing list(s)](/tech-deep-dive/mailinglists), the [Telegram channel](https://t.me/radioangrezi), [Facebook](https://facebook.com/radioangrezi), [Instagram](http://instagram.com/radioangrezi).

Each show has a fixed ***Pat\*in*****&#x20;(plenum contact person)**, which helps with announcing, setting up, testing and organising the broadcast. Please don't do solo-broadcasts. It is nice to have a helping hand (even if it is just a fallback).

## Get booked airtime

Your broadcast must be [scheduled in AirTime](http://studio.radioangrezi.de/schedule) (by somebody with access, usually the coordination gang). This way it will be also visible on the website.

If you [stream using your own account](/engineering/remote#direct-one-way-streaming-to-the-studio-harbor) form a remote location, the booking **must include your user account**. Otherwise you will not be able to connect!

You will get your **login credentials (username and password)** form the [tech crew](mailto:tech@radioangrezi.de) or your plenum contact person. These accounts are managed in [Airtime](http://studio.radioangrezi.de/user/add-user) and must be "DJ accounts". Coordinators with access to the `studio` account can create user accounts at: <http://studio.radioangrezi.de/user/add-user>

## Do a rehearsal

Before your broadcast you should do a **rehearsal** using your setup (soundcard, computer, mixer, etc.) and a test connection. Therefore you should book a second "rehearsal slot", also including your user account. Prefix the show title with `(Test)`, to make it invisible on the website.&#x20;

Follow the [detailed guide on how to stream form a remote location](/engineering/remote) to set yourself up.

{% hint style="warning" %}
Your "rehearsal" will be live on the stream, available **publicly**. (We don't have a private test possibility yet.)
{% endhint %}

You can additionally use the [testserver](/engineering/remote/connection-test) for an early rehearsal.

## Connect to stream

If your show time has come. **Connect to the stream and start the recording.**\
Usually you should open the stream with a **jingle** and an **announcement** of what is coming up.

You find all jingles here:\
<http://server.radioangrezi.de/Productions/_Jingles/>

If you use butt, it should look like this:

![](/files/-M32t5SbI6RBLsSNsc0X)

In Airtime it should look like this. The **`master` must be disabled** if you are using the `show` input.

![](/files/-M32z_DzjzKYW-wLYGz4)

{% hint style="danger" %}
Currently there seems to be an issue with liquidsoap, which causes the stream to stay silent even though your are successfully connected.

[see below](/production/step-by-step-guide#stream-stays-silent)
{% endhint %}

## Record

Don't forget to record. (We are working on a server-side recording currently.) Local recordings have a better quality anyway, though.

## Enjoy!

your broadcast.

Keep an eye on the **shoutbox** on the website. You can also use the studio view:\
<http://talk.radioangrezi.de/studio.html>

(If you run **overtime** your slot must be prolonged, otherwise you will be kicked out of the stream.)

## Known Issues

### Stream stays silent

Currently there seems to be an issue with liquidsoap, which causes the stream to stay silent even though your are successfully connected.

Workaround 1: **Manually restart `airtime-liquidsoap` on the server.**

<http://studio.radioangrezi.de:2812/>\
*You find the username and password in the general passwords.txt file.*

Workaround 2: It could also be true, that the **master source is still enabled**! This would block (= silence) the show source.


# Step-by-Step from Studio

A cheat sheet on how to start a broadcast  from the radio angrezi HQ.

## References

Angrezi Sharepoint (<https://hfkbremen.sharepoint.com/sites/angrezihq/>)

Libretime / Studiobackend (<http://angrezistudio.hfk-bremen.de/>)

## Planning a new broadcast

For very spontaneous Broadcasters: If your broadcast is neither planned nor scheduled on the angrezi website, there is some steps you need to follow before you go on air. (If your program already shows up on the [angrezi website](http://www.radioangrezi.de) you can skip this.)

1. As your broadcast is most likely part of a bigger radioprogram, help your peers with the planning. If your show has been discussed before proceed to step 2. If your show is a novelty to the rest of the team, it is highly recommended to visit a meeting and propose your plans. Nevertheless you can write down your proposal in a File you find on the [**Angrezi Sharepoint**](https://hfkbremen.sharepoint.com/sites/angrezihq/) here *`RA HQ > Dokumente > PROGRAM > Radio Show Catalogue & Pipeline.xml`*
2. Find a respective Schedule for the Day of your Broadcast on the  [**Angrezi Sharepoint**](https://hfkbremen.sharepoint.com/sites/angrezihq/) .  Navigate to *`RA HQ > Dokumente > PROGRAM > Schedules > *YEAR* > *DATE*`*&#x61;nd fill in your show into the excel file with all required information that you can provide, most importantly your contact data. If your show is part of a bigger program, someone might want to get back to you in order to set precise start and end times for your show. In case you are responsible for the "broadcast-day" yourself, make sure to contact all participants in time to get all information you need.
3. If your broadcast is all planned but still does not show up no the [angrezi website](http://www.radioangrezi.de), it is because it has not been scheduled in our broadcasting software [Libretime](http://angrezistudio.hfk-bremen.de/). Navigate there and login. Logindata is found on the [**Angrezi Sharepoint**](https://hfkbremen.sharepoint.com/sites/angrezihq/)&#x20;

   *`RA HQ > Dokumente > Administration > passwords.txt`*  once logged in you will land on the libretime dashboard (picture1)  . <img src="/files/-LapM6PSaGAVu9cmiA65" alt="" data-size="original">                                                   An interesting page but for now we want our shows to show up in the calendar and on the [angrezi website](http://www.radioangrezi.de). Therefore find a button **Calendar** in the leftmost menu  and click it. Here you will see an overview of roughly a month with recent and upcoming shows. In order to add a new show, click **+ New Show**&#x20;

   <img src="/files/-LapP5ySmDBSAE5d7T7n" alt="" data-size="original">                                                  Find yourself on a new input mask that looks like this:     <img src="/files/-LapQLmsGfElzAYLM6BS" alt="" data-size="original"><img src="/files/-LapQLmu5zJoomvc0z14" alt="" data-size="original">

   <img src="/files/-LapQLmraKnbqKGLSgbV" alt="" data-size="original">                                        You can now enter a show name&#x20;


# Communication (to the world)

(kinda corona edition but works for most other things too)

## Intro

When planning a (or several) broadcasts, you will eventually want to advertise it at some point (or, basically, let people know what will be broadcasted, and when). There are a few steps you will have to take to make a proper accouncement for upcoming shows:

1. **Collect the upcoming shows.**
2. **Add shows to the LibreTime Calendar**. This basically enables us to broadcast within the selected time slots, and also automatically transmits the schedule onto our website.
3. **Send an e-mail.**
4. **Publish the schedule on Social Media**: Facebook, Telegram Channel, (Instagram). To get access to the different accounts, ask some of your Angrezi fellas (e.g. Kaja or Isa) to help you with the log-in data.
5. **Re-Announce Shows before they are starting**. This is mainly important for the Telegram Channel and Instagram.

This list helps you to remember the single steps to take; below, you will find more detailed descriptions of the single tasks. Keep in mind that step 3, 4 and 5 are, of course, not a strict science. You can always come up with alternative formats (e.g. of the e-mail text, the instagram story layouts, etc) if you'd like to, but keeping a general image – especially when a row of programs are somehow connected with each other – isn't always bad either.

## 1. Collect the upcoming shows

This usually happens in different ways, depending on what you want to be announced. For bigger events such as HST, we collect shows in excel sheets, while stand-alone shows are often just communicated between producer and the person who's responsible for communication at that time. ***Corona edition:*** For the "Angrezi Stays Home With You" program, we are using [this](https://hfkbremen.sharepoint.com/sites/angrezihq/_layouts/15/Doc.aspx?sourcedoc=%7B9E9A53EE-9563-44DD-B9FB-0D6662D0A7F3%7D\&file=2020-03%20Angrezi%20at%20Home.xlsx\&action=default\&mobileredirect=true\&CT=1586169614655\&OR=ItemsView) sheet. Please keep it as updated as possible. You cannot always rely on it though, so before you send out an e-mail to ALLEStudierende, check with the Angrezi Crew if anything has changed within the schedule.

I admit, there is not much more to it than already mentioned above. A few sidenotes though:

It is important to know **title, description, date + time, and producer** (+ Pat\*innen, in case of home studio broadcasting during corona) of each show. You also need to know who/from where a home broadcast is started, which will be important during step 2.

Always keep in mind that people sometimes change things – in the program, in the description, the time, or anything else. Before announcing a show, it is wise to talk to the producers one more time to make sure the shows are actually happening.

## 2. Add shows to the LibreTime Calendar

Every show needs to be put down in the LibreTime Calendar. As mentioned before, this is important for the broadcast, and the schedule on our website.

When logged in on LibreTime, you will find the Calendar on the leftern side of the webpage.&#x20;

![](/files/-M4UAx4up9nJex9NDpMj)

The "+ New Show" button enables you to create a new show. You can also create a new show via clicking onto the day you choose on the calendar itself.

Now, you only have to fill in all the important info about your show. This contains **Name, Description, Start Time, End Time**, and in case of mobile / home studio broadcasting (meaning all corona shows), **DJ.**

![](/files/-M4UCivOkADV1X94PUe8)

*Good to know*: You are doing a completely pre-recorded show? Check [this guide](https://docs.radioangrezi.de/auto-schedule-prerecorded-shows-on-libretime) on how to easily do auto scheduled show.

After filling in all the important information, hit the "+ Add this show" button at the top. And – done! You can, of course, later edit the shows (e.g. to alter the time), by once clicking on them in the calendar and choose "Edit Show".

![](/files/-M4UD_9cgfxRBVy394Ei)

*Good to know*: If you want to do a test show that is not supposed to show up on our regular website (again: all shows from the LibreTime Calendar automatically show on our webiste, too!), you can simple use "(Test) *Name*" as a title when creating the show. This way, they are hidden from our website, but you can still access the stream, e.g. to do (as the name might already reveal) a test show.

## 3. Send an e-mail

We do in general announce all our programs via our hfk e-mail address <radioangrezi@hfk-bremen.de>. During the corona shows, these e-mails look like this and use the subject "ANGREZI STAYS HOME WITH YOU // PART X":

![](/files/-M4UEcHcmyNRjnfdzrGY)

> Dear all,\
> \
> xxx insert some short text to point out that this is the upcoming program, add "starting **TONIGHT // 7PM**" to it xxx\
> \
> *Due to the current situation we are spontaneously starting a program for everyone staying at home. By broadcasting from several different locations spread all over Bremen, we will put together a spontaneous program for the upcoming weeks – brought to your ears only.*\
> We will update you about any upcoming shows via e-mail, our website, and our telegram channel (link below).\
> Stay at home, Angrezi stays home with you.\
> \
> **//////////////////////////////////////////////////////////////////////**\
> \
> xxx add all the upcoming shows like this: xxx\
> \
> Thursday, April 9th, 7pm\
> **Showtitle**\
> Showdescription\
> \
> Friday, April 10th, 7pm\
> **Showtitle**\
> Showdescription\
> ...\
> \
> **//////////////////////////////////////////////////////////////////////**\
> \_You can find out more about our call for participation here: <http://radioangrezi.de/special.html_\\>
> \
> Stay safe. Stay home.\
> ❤️

Keep in mind to insert the **signature** within Outlook, too. In Angrezi's Outlook's Draft folder, you can already find a few drafts that contain the text above.

The e-mails usually get send to the following addresses (but you can add more if you feel like it):

* <ALLEStudierende@hfk-bremen.de>
* <lehrende@hfk-bremen.de>
* <ALLEVerwaltung@hfk-bremen.de>
* <Lehrbeauftragte@hfk-bremen.de>
* <pressestelle@hfk-bremen.de>
* <ra-friends@radioangrezi.de>
* <ra-artists@radioangrezi.de>
* <ra-promotion@radioangrezi.de>
* <ra-hq@radioangrezi.de>
* <aktive-bremen@lists.riseup.net>
* <s.wendlandt@hfk-bremen.de>
* <beribobo@yahoo.de>
* <mueller@textpr.com>

(The last three are connected with the press office ("Pressestelle"))

The e-mail for the upcoming show has to be sent **at least one hour before the first announced show starts**. Two hours is even better.

## 4. Publish the schedule on Social Media

As mentioned, we use the following social media platforms for announcements: Facebook, Telegram Channel, and Instagram.

*This description is specifically for the corona shows:*

* **Facebook**: Simply do a regular post on the Radio Angrezi Page by copying the text from the e-mail. Timewise I would suggest to do this right after you send out the e-mail. You only have to either alter the third paragraph like this: "... update you about any upcoming shows via e-mail, our website, and our telegram channel ~~(link below)~~." or, alternatively, actually add the link <https://t.me/radioangrezi> to the bottom of the post. Publish the post, done!
* **Telegram Channel**: Basically, you do the same as on Facebook. Just post the whole e-mail text without the "(link below)".
* **Instagram**: At the moment, we don't publish the full program on instagram. If you have any suggestions on how to do it (or a neat idea for an actual "post" post), go for it! Instagram is nice for selective show announcments though (see below).

Please also do these posts **at least one hour before the first show starts**.&#x20;

## 5. Re-Announce Shows Before They Are Starting

This is mainly done on the **Telegram Channel** and **Instagram**. It is nice to remind people of the specific shows that are coming up. This is usually done about an hour before a show starts, and the moment the show is starting.

For the **Telegram Channel**, the specific show text is usually just repeated once and, if possible, accompanied by an image or a .gif. Ask the producer of the show for some images in advance! You can, of course, post as many images for a show as you'd like. It can look somewhat like this, posting **the announcement some time before the show starts** + followed by a **"TUNE IN NOW✨" or something similar the moment the show starts:**

![](/files/-M4UJmniZ9KA2hzKHRMs)

The basically same thing is happening on **Instagram**. Post the single show announcements in the instagram **story**, also some time before the show starts (suggested minimum 30minutes, max. 2hours before). When the show starts, use an image for a follow up post within the story. At the moment, these announcements look like this:

![](/files/-M4UKzeNeUgNvFNXFF4R)

Yes, this is basically just a screenshot of the website. But keep in mind that this is actually pretty quick + easy, and it's also nice to have a visual connection between social media and our website / ci. Keep in mind that, of course, you can then post more pictures of the show / setup / theme / etc., and always tag people / do reposts / etc.


# Logins / Accounts

Generally we try to require the *least amount* of logins and extra usernames and passwords as possible. Nobody likes yet another password. 😉

{% hint style="danger" %}
Of course we **don't write any passwords in this public document**, which everybody on the internet can read. We use a password-protected (and hopefully encrypted) storage to save the actual passwords for you to see.
{% endhint %}

The logins to most Angrezi services are **currently shared username and passwords**. This is true for the following services:

* LibreTime (user: `studio`)
* Fileserver (user: `angrezi` or `artist`)
* Mac in Studio XI (user: `angrezi`)
* Controller / Server Status / ? (user: `studio`)
* Mailinglists (no username)

For these services use **your own login**:

* LibreTime for Streaming / in Butt (user: *usually your first name*)
* SharePoint: your own HfK-Account (or Microsoft-Account)

All shared logins are stored here:

* [Common Accounts and Passwords](https://hfkbremen.sharepoint.com/:x:/r/sites/angrezihq/Freigegebene%20Dokumente/Tech/Accounts%20and%20Passwords%20%E2%80%93%20all%20Plenum.xlsx?d=w1812620617f244dda3ee58da877a6d0d\&csf=1\&web=1\&e=naRzN4)
* [Administrative Account and Passwords](https://hfkbremen.sharepoint.com/:x:/r/sites/angrezihq/Freigegebene%20Dokumente/Tech/Accounts%20and%20Passwords%20%E2%80%93%20only%20Admins.xlsx?d=w785f9f7fad864854a98f932aa088b113\&csf=1\&web=1\&e=gETYTE) (for Tech-Crew only)

*Please handle responsibly!*


# Remote Connection

There are multiple ways broadcasting from remote locations (with or without somebody being in the studio).

In any case preparation in advance and good timing is very necessary. **Do not underestimate the amount of testing, coordination and communication during a live production.** You can save yourself, your guests and the people doing the previous broadcast a lot of nerves if everything is well prepared and tested.

While establishing the remote connection and during your live broadcast please call into the studio using a (separate) cellphone to **+49 (0)421 9595 1213** (this is our studio desk phone, not the on-air number.)

Remember that method 1 and 2 have a **5 – 30 seconds delay**. That is alright in most situations, and makes sure the stream does not cut off. Communicate with your correspondent in the studio to agree on how the handover to the remote location and back to the studio is happening. (e.g. counting in form 10 to 1 works well, announcing "back to the studio" or similar on air, and agreeing on a precise clock-time for the cast to end.)

Enjoy the ride!

## Direct (one-way) Streaming (to show source)

The easiest way to broadcast (form anywhere) on Angrezi is to do establish a *direct* stream to our server. All you need is a **good internet connection** (wired if possible), a **computer** and possibly an **external sound** card. (You can also use the mobile studio or another hardware streamer / encoder if you have it.)

{% hint style="success" %}
As always: **Please test your setup in advance!** Soundcards, hardware, sampling rates and internet connections might be different and can (or will) cause trouble. Preferably do a test run at least a day before you want to go on air.
{% endhint %}

You can use the free and open-source software [**Butt** ("broadcast using this tool")](https://danielnoethen.de/butt/) on Windows, Mac or Linux to connect, stream and record. You can also use other software that supports the Icecast protocol (and works with Liquidsoap).

Open `Settings▸` in Butt to set up the server connection (main tab) and sound input (audio tab).

Add a new server and **Connect** to our streaming server with the following **settings in Butt**:

* Name: choose a name for this connection (e.g. `Angrezi Live Show`)
* Type: IceCast
* Address: `studio.radioangrezi.de`
* Port: `8002` (Alternative port if your firewall is blocking `8002`: `8080`)
* no SSL (nothing to do)
* IceCast User: \<your username> (or `mobile`)
* Passwort: \<your password>
* IceCast Mountpoint: `/show`

You will get your **login credentials (username and password)** form the [tech crew](mailto:tech@radioangrezi.de) or your plenum contact person. These accounts are managed in [Airtime](http://studio.radioangrezi.de/user/add-user) and must be "DJ accounts".

{% hint style="success" %}
You can use the [test server](/engineering/remote/connection-test) to check your connection in advance, without booking a slot.
{% endhint %}

![](/files/-M2szUZ_WEHW2uK96TFd)

As soon as you have your settings saved you can **start streaming** using the Play Button **\*\*`▸` in the main window. The status should switch to `connecting...` and then to `stream time XX:XX:XX`. Use the red recording button `●` to also** do a local recording\*\*. (You can enable automatic recording in the settings window.)

![](/files/-M32t5SbI6RBLsSNsc0X)

{% hint style="warning" %}
You can only connect to this mountpoint if you have a a **booked time slot (in** [**Airtime**](http://studio.radioangrezi.de/schedule)**)** for this account. Otherwise your connection request will be denied with "connect: invalid user/password!" (This is true for rehearsal connections as well.)

You can use the [test server](/engineering/remote/connection-test) to check your connection in advance, without booking a slot.
{% endhint %}

You can **select your audio input** (soundcard or virtual soundcard) as Audio Device in the audio tab. The **samplerate** must match your soundcard. Some cards support multiple sample rates. Select **44110 Hz** if you can, that is what the Angrezi stream uses as well. Please stream with MP3 **320 kbit/s (Stereo)**. Remember that you have to **record locally**: 320 kbit/s MP3 or uncompressed WAV is recommenced.

![](/files/-M2t2jXA3z4Z96DqdGoc)

{% hint style="info" %}
**background info**

Airtime offers a second "Show Source", which is a Icecast input stream (realised through Liquidsoap). This stream is only active and passed through to the output stream (on stream.radioangrezi.de), when

1\) there is a show scheduled for the moment you are trying to connect\
2\) when there is a "DJ-User" selected for that show\
3\) the "Master Show" is disabled.
{% endhint %}

## Direct (one-way) Streaming to the studio (Harbor)

This is the almost same setup (and use case) as before. The signal does not go *directly* to the stream though, but is **routed into an analog-in** on the studio mixer. (Note: Nonetheless you will have a 5-15 second delay.)

We did add a custom *Icecast-like* harbor with `Liquidsoap`, which outputs directly to the studio mixer. Remote locations can easily be integrated into a live programme broadcasted (primarily) form the studio.

Connect to our Icecast server with the **following settings using Butt** (see above):

* Server: `studio.radioangrezi.de`
* Port: `8002`
* User: `source`
* Passwort: (ask the producer or engineer or tech crew)
* Mountpoint: `/studio`
* Name: choose a name for this connection (e.g. `Angrezi Studio`)

Please stream with **192 kbit/s**. Remember that you have to **record locally**: 320 kbit/s MP3 or uncompressed WAV is recommenced.

You can only connect if this harbor is currently not in use.

## Duplex connection (for shows with Studio + Remote Guests)

{% hint style="success" %}
As always: **Please test your setup in advance!** Soundcards, hardware, sampling rates and internet connections might be different and can (or will) cause trouble. Preferably do a test run at least a day before you want to go on air.
{% endhint %}

As always: **Please test your setup in advance!** Soundcards, hardware, sampling rates and internet connections might be different and can (or will) cause trouble. Preferably do a test run at least a day before you want to go on air.

We use a IP-based – *yes, no more ISDN, wow!* ;) - voice bridge to connect remote guests to the studio / stream. This setup can be used to do productions from **multiple locations with two or more participants** / locations.

We have used two protocols / providers so far:

* [Studio Link](https://studio-link.de/)
* \_\_[*Now*](https://now.source-elements.com/) \_\_by Source Elements (not used in production so far)

Both protocols use peer-to-peer Audio over IP (e.g. SIP with Opus), and require only a decent internet connection.

### Studio Link

#### as guest

[Download](https://doku.studio-link.de/standalone/installation-standalone.html) and install Studio Link on your computer. The software will run as a service (in the background when started) and controlled through your web browser. Your web browser will open automatically when you start the service.

You will find a [step-by-step overview](https://doku.studio-link.de/standalone/erste-schritte-standalone.html) (in German) and further on Studio Links website.\
This explanation is referring to the standalone version of Studio Link. A DAW plug-in version available as well.

As soon as the service is running you can select your audio interface and start a connection ("call"). You need a **partner ID** to call to. Ask the engineer to give you Angrezi's partner ID in advance. (We currently don't have a fixed / named parent ID.)

#### in the studio

Studio Link might be running on the studio mac already. You can access the web interface at <http://127.0.0.1:58736/>. Otherwise start it.

Usually studio link is routed on the same channels as the telephone system is. (If your show want to take regular phone call-ins as well, this must be changed.)

Send your partner ID to the partners. (We currently don't have a fixed / named parent ID.)

### Source Elements Now

#### as guest

Requirements: Windows, Mac or Linux PC, a good internet connection (1 mbit/s up and down is plenty), and the **Chrome or Chromium browser** (not Firefox, Safari, or otherwise, sorry!)

Connect at to Source Elements at <https://now.source-elements.com/#!/guest>\
`ACCOUNT TO CONNECT WITH:` radioangrezi\
Use the `PASSKEY` provided by our producer / host in advance.

You should be good to go! (Please test everything before you are on air!)

#### in the studio

Visit [Source Elements](https://now.source-elements.com/#!/) in the Browser (see controller / bookmarks bar). Everything should be preconfigured.

(put default configuration here)

## Duplex connection via Dante (in local network)


# Connection Test

You can use our test server (more specifically test mountpoint) to test your setup, **without booking a slot and using the "real" live stream.**&#x20;

{% hint style="danger" %}
You should none the less do a **final test with the real Angrezi stream.**
{% endhint %}

Follow the [regular guide](/engineering/remote#direct-one-way-streaming-to-show-source), with the **following settings**. You can **add an extra server connection** to save both setups in your **butt** installation:

* Name: choose a name for this connection (e.g. `Angrezi Test 1`)
* Type: IceCast
* Address: `studio.radioangrezi.de`
* Port: `8000`
* no SSL (nothing to do)
* IceCast User: `test`
* Passwort: `test`
* IceCast Mountpoint: `/test-1`

You can listen to the stream using a browser or VLC using this URL: <http://stream.radioangrezi.de:8000/test-1>

You alternatively can use streamaudio's testserver to test your streaming to Icecast.

{% hint style="danger" %}
You should none the less do a **final test with the Angrezi server.**
{% endhint %}

Follow the [regular guide](/engineering/remote#direct-one-way-streaming-to-show-source), with the **following settings**. You can **add an extra server connection** to save both setups in your **butt** installation:

* Type: IceCast
* Server: `stream.streamaudio.de`
* Port: `8000`
* User: `teststream1`   (in butt leave the IceCast User as 'source')
* Password: `passwort1`
* Mountpoint: `/teststream1`
* Name: choose a name for this connection (e.g. `Testserver`)

Falls `teststream1` gerade belegt ist, kannst Du alternativ eine der folgenden Kombinationen versuchen:

* User: `teststream2` + Password: `password2`
* User: `teststream3` + Password: `password3`
* User: `teststream4` + Password: `password4`

Den Stream kannst du dann auf <http://stream.streamaudio.de:8000/teststream1> (bzw. /teststream2-4) hören.


# Software

Some of this software might be useful:

| Use                          | Software                                                                                                             | OS              |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------- | --------------- |
| Streamer                     | [Butt](https://danielnoethen.de/butt/)                                                                               | Mac, Linux, Win |
| Audio-Editor and Recorder    | [Audacity](https://www.audacityteam.org/)                                                                            | Mac, Linux, Win |
| Virtual Sound Card / Routing | [Soundflower](https://rogueamoeba.com/freebies/soundflower/) ([GitHub](https://github.com/mattingalls/Soundflower))  | Mac             |
| Virtual Sound Card / Routing | [BlackHole](https://github.com/ExistentialAudio/BlackHole)                                                           | Mac             |
| Virtual Sound Card and Mixer | [VB Cable](https://www.vb-audio.com/Cable/index.htm) or [Voicemeter](https://www.vb-audio.com/Voicemeeter/index.htm) | Win             |


# Recording

## Server-side Recording

Broadcasts can be recorded with our server-side recorder ([angrezi-live-recorder](https://github.com/radioangrezi/angrezi-live-recorder)) and will be stored on the [file server](http://server.radioangrezi.de/Live%20Recordings/Studio-Live/). Recordings can be scheduled **automatically** through Libretime/Airtime or triggered **manually**. The recorder will **record the final output stream** itself **not your local input** source (using `streamripper`).

{% content-ref url="/pages/-M52QCqyeFVLP7r99JLb" %}
[Broken mention](broken://pages/-M52QCqyeFVLP7r99JLb)
{% endcontent-ref %}

Files will be named with the following pattern:`%Y/%m/%d/radio-angrezi-live-%Y-%m-%d-%%H-%M-%S_%label.mp3` with `%label` becoming the shows title, when the recording is finished. Unfinished recordings will end in `_incomplete.mp3`. Recordings with out a show title will have no `%label`.

![](/files/-MD57UO2eRdD-4A6C4fR)

### Automatic Recording

When scheduling a show in Airtime/Libretime the recorder will also schedule a recording **automatically for all shows**. (The checkbox `Record form Line In?` is currently ignored.) The recording will start at the beginning of the show and end with the scheduled end time.

Automatically scheduled shows can still be **stopped manually**. The recorder will the "ignore" the rest of the broadcast. *Currently (July 2020) it is not possible to deactivate the automatic stop at the end of the show, yet.*

### Manual Recording

Even without scheduling a show (or without selecting **`Record from Line In?`**) you can still start and stop recording at your own time. This way you can also start a recording before the show actually starts in the calendar.

Use the [web interface](http://studio.radioangrezi.de/controller/) to start and stop the recorder.

## Local Recording

{% hint style="danger" %}
If the production is **really important** to you and you need the recording in **high quality** always make a local recording!
{% endhint %}

If you would like to have the **highest possible recording quality** and have no dependency on the network connection and streaming server, you **should do a (additional) recoding locally** at your audio mixer / master out / in the studio. The streams quality is limited to maximum 320 kbit/s MP3 and the network connection can always be shaky if you are broadcasting form a remote location.

Use **butt, a hardware recorder** (e.g. Zoom H4) **or a software solution** to do a local recording.


# Broadcasting pre-recorded shows

## What's the purpose of this?

In case the show you are planning to broadcast is pre-recorded (e.g. in form of a .wav or .mp3 file) and you are not planning on having any additional live element (such as life hosting via microphone, etc.), this option of automated streaming might be just the one you're looking for. Embedding your prerecorded show in the Playlists on LibreTime will enable you to broadcast as easy as it gets.

## Step-by-step instruction

### How to add your file to LibreTime

#### Method 1: Upload via upload.radioangrezi.de

Radio Angrezi has a seperate upload interface at <http://upload.radioangrezi.de> which is publicly accessible. The goal of this interface is to provide external show makers without Libretime access, an easy way to upload their shows and files. **Uploaded audio files automatically appear in Libretime.**

This method also has an advantage with **large audio files** as they can be uploaded with breaks or interrupts in between.

#### Method 2: Upload via Libretime

Before you can use your show file for a Playlist, you will have to upload it onto the LibreTime server. Sounds easy, and it is, but some of us have so far missed the quite visible Upload Button on the page:

![](/files/-M4U-8WQKPnxdtY6QuYi)

Now you can simply drag your show files onto LibreTime ("*Drop files here or click to browse your computer*").

The files you uploaded will then appear in the Tracks list (you'll find this underneath the Upload button on the left). You will also find our **jingle** (radioangrezi\_jingle.wav) and the **corona info line** (einspieler\_raw\.wav) within this list.

### Add your tracks to your scheduled show

Now you have to add all the tracks that shall be played during your broadcast, to the show. We assume that your show is already scheduled. Otherwise: **How to add a show in the calendar is described** [**here**](https://docs.radioangrezi.de/program-communication) **in Step 2.**

Find your show in the calendar, click on it and use "Schedule Tracks".

![](/files/-M7xW3VnTco0z-GM0FeS)

Now you can find or search (using the search bar above) for your tracks and add them to the show.\
Use the `+` button or drag & drop your tracks into your show (on the right hand side). **Keep in mind to add the jingle before and after your show files, plus the corona info line, to your playlist.**

![](/files/-M7xWX2mY3M8BeHINd_m)

After all tracks have been added, including the jingle, use the `Ok` button to save.

{% hint style="danger" %}
Please remember to **turn off**, both the **master source** and the **show source** if you want to use the fully automated playback in LibreTime. Otherwise the signal form the other sources will be used and overrule your scheduled programme.
{% endhint %}

![](/files/-M7xXHmOzufqi6Xj4h9Y)

Alternatively you can use a playlist. This is only necessary if playlists (or parts of playlists) shall be used more than once.

### How to create a Playlist

After uploading your files you will have to create a Playlist. These are as simple as regular playlists; you basically add several audio files and rearrange them in your preferred order.

You can create a Playlist by heading to the Playlists page (one further below the Tracks button on the left). "+New" will create a new Playlist, the little pen icon will let you edit an existing one after you select it. The selected Playlist will then pop up on the right or underneath the list of existing Playlists:

![](/files/-M4U13SePQiJ5vTsni6s)

After creating and naming your Playlist (it doesn't necessarily need a description, but good naming helps reducing chaos!), you will have to return to the Tracks to add the ones you uploaded to your Playlist. The 'edit box' of your Playlist will remain opened, but the list of Playlists on the left (or top) will be exchanged with the Tracklist.

![](/files/-M4U1WsD3dJ97C-fTB73)

Now, you can simply drag & drop your tracks into your playlist. **Keep in mind to add the jingle before and after your show files, plus the corona info line, to your playlist.**&#x20;

![](/files/-M4U2G6aXQZRsGe0gmMp)

You will still be able to rearrange the tracks you added to the playlist by dragging them up and down, to create the order you want. And don't forget to hit the **save** button when you're finished!

### How to connect your Playlist to your show slot

After creating your Playlist, you will have to let LibreTime know when to play it. For this, you need a show slot in the calendar (leftern side of the webpage). **How to add a show in the calendar is described** [**here**](https://docs.radioangrezi.de/program-communication) **in Step 2.**

When creating or editing your show, there is an option named "Automatic Playlist". You simply need to check the "Auto Schedule Playlist ?" box and select your playlist underneath.

![](/files/-M4U3RqlYqdzqobOYHdu)

That's it.

*Good to know*: If your show is, for example, 30 minutes long but you have a 1.5 h time slot in the calendar, you may also check the "Repeat AutoPlaylist Until Show is Full" box to make your Playlist repeat itself automatically within the time slot.

## Done!

Congratulations, you made it! Besides the steps above, you don't have to do anything else, and your show will simply broadcast itself via LibreTime – and no, you don't have to switch "On Air", LibreTime is doing this for you as well.


# Telephony

call me maybe

One of the old-school ways to let the ***audience*****&#x20;participate** in radio productions, is to **invite to call in**.\
If prepared correctly you can invite your audience or guests into your live production, using this phone number:

```
0421 9595-1212
```

There is also a usual desk phone in the studio at Speicher XI. You can reach that at:

```
0421 9595-1213
```

This page is documenting **how to use our phone system**, the **conference call system**, and how it is working behind the screen, speaker and microphone.

## Numbers

We are running the open source **Asterisk** telephony server, which is using a **Sipgate** trunk to connect to "the outer world".

We currently have 3 numbers (in Bremen) trough a sponsored (gifted) Sipgate account.

* **0421-40894123**: used for Angrezi Call-In (9595 1212)
* **0421-40895824**: not used
* **0421-40894125**: used for ConfBridge (before used for *telematic apparatus*)

HfK has also assigned two extensions (in 0421-9595-XXXX) to us:

* **1212**: forwarded to 0421-40894123
* **1213**: linked to our physical desk phone (Cisco)

## Konferenzschaltungen

Bitte benutzen die Nummer **0421-40894125** für die Einwahl. (Eine Einwahl über **0421-95951212** und dann **Taste 9** ist weiterhin möglich, verschlechtert aber die Qualität bzw. Latenz leicht.)

Es gibt (nun) mehrere Konferenzräume: **10**, **20**, **30**.\
Nach der Einwahl, wähle: **\<Raumnummer> + #**.

In einer Konferenzschaltung werden alle Menschen die sich "einwählen" miteinander in einen virtuellen der Gesprächsräume gepackt. Naturgemäß braucht es etwas Gewöhnung sich auf diese Art gut zu unterhalten: Gute **Moderation oder klar Aussagen** (z.B. "jetzt bin ich fertig" mit einem Redebeitrag) können helfen. Auch solltest Du **dich am Anfang zur vorstellen**, die anderen Leute können dich ja nicht sehen.

Falls Du eine Pause machen willst, oder es bei Dir zu viele **Hintergrundgeräusche gibt, schalte dich stumm**.

In der Konferenzschaltung hast Du folgende Funktionen per Tastendruck auf deinem Telefon:

**1** – Deinen Anschluss **stumm schalten** (bzw. Stummschaltung aufheben)\
**4** – Deine Hörlautstärke verringern\
**6** – Deine Hörlautstärke erhöhen\
**7** – Deine Sprechlautstärke verringern\
**8** – **Konferenz verlassen**\
**9** – Deine Sprechlautstärke erhöhen

Achtung: Einige Handyverträge kappen nach **2h Gesprächszeit** die Verbindung. Leider müsst ihr euch dann einfach wieder neu einwählen. Wir können das nicht verhindern.

Eine neuerdings eine **grafische Oberfläche für die Konferenzschaltungen** (auch im On-Air-Betrieb): [phone.radioangrezi.de](http://phone.radioangrezi.de/admin/conference/). Von hier aus können Teilnehmer\*innen **angerufen werden** und **stumm/nicht-stumm** geschaltet werden.

![](/files/-M5EuxAgF4cU__6u9ERC)

Für Live-Sendungen bedeutet das, dass wir mit mehreren Personen gleichzeitig sprechen können und die hinzukommenden Anrufe sehen, ein- und ausschalten können.

## Functions on 1212

First all functions are announcement to the caller by a text to speech voice / or human voice recording. Announcement files and texts are stored on [Sharepoint](https://hfkbremen.sharepoint.com/sites/angrezihq/Freigegebene%20Dokumente/Tech/Telephony) and in the Asterisk config.

### #1 Listen

Playing the stream (live-low) to the caller.

### #2 Call-in

Forwarding the caller into the conference room (no 10), muted.\
Was directed to the VoIP client (account `studio`) on the **studio Mac**, before, as well as to the **Mobile Studio** using a Sipgate SIM in a cellphone.

### #3 Leave a message

Forward to asterisk voice mail. Messages are then e-mailed to <radioangrezi@hfk-bremen.de>.

### #9 Conference

(This function is not announced in the beginning.)

All of these functions are setup in `/etc/asterisk/extensions.conf`. You can find a few comments there.

## Asterisk Server

configured at `/etc/asterisk/` running as `asterisk` (system.d service and user).

## Astconfman Conference Manager

[astconfman](https://github.com/litnimax/astconfman) unter `/var/angrezi/astconfman/` auf Port 5070, per Reverse Proxy auf [http://phone.radioangrezi.de/](http://phone.radioangrezi.de/admin/conference/).

## Connection to HfK telephone-system

The extension **1212** is currently simply forwarded to us using **0421-40894123.** This is added a small additional latency to the connection, we guess.

Apparently it would be possible to connect the HfK phone system (Cisco Call Manager) to us, using a [other method, a SIP-trunk](https://www.voip-info.org/asterisk-cisco-callmanager-integration/). This method was rejected by Dezernat 5 in 2018, and not further discussed.

## Other ideas

* [ ] A call-in to do an ad-hoc radio production using your phone.
* [ ] Quizzes and games
* [ ] Forward to mobile numbers / at home
*


# Behringer X32 Producer MIXER

Documentation on Settings and Workflows

This page explains the settings and workflows introduced by Chi Him Chik (2021-2025) for Radio Angrezi's main mixing console.&#x20;

If one needs to learn about the functionality of the Behringer X32 Producer Mixer, please refer to the user manual of the console:

<https://www.bhphotovideo.com/lit_files/1154886.pdf>

**IMPORTANT - Remark about ownership**

The mixing console Behringer X32 Producer in the Radio Angrezi studio does **NOT** belong to the radio. It is borrowed from Jukka Boehm (<boehm@hfk-bremen.de>), with a hard shell case stored at the storage room of the radio.&#x20;

**Switching On/Off**

The On/Off switch is behind the console, on top of the power port

**Scenes**

Scenes refer to the preset of settings and parameters saved in the mixer, which include every channels' levels, gains, EQ, everything.&#x20;

One can access scenes by pressing the "SCENES" button next to the screen on the top right corner of the console, and then press the right arrow button to access the "Scenes" menu.&#x20;

By default, item 00 and 01, titled "Radio\_Default" & "RadioAngreziBkUp", are saved as the default scenes for Radio Angrezi. The two are identical, and should NOT be overwritten unless with thoughtful intention. If there is any confusion during the mixing session, these two scenes serve the final fallback option.

**Default Settings**

From the default scene, the following is set up:

* Input channel 1&#x20;
  * Phantom power is ON
  * Compressor is ON
  * A low cut on 40 Hz is ON
* Input channel 5-6 are Linked
* MAIN Output Channel - Compressor is ON
* No Input channel is route to the output channel
* No EQ or Compressor is enabled, unless noted above


# Mixer Routing

Scene "Radio\_Default" updated on 7.10.2025

**Inputs**

Channel 1-16 are assigned to Analog Inputs (XLR input 1-16 behind the Mixer)

* 1 -> Rode Microphone (attached on the mixing desk)
* 2 -> Nothing Connected&#x20;
* 3-8 -> Stage Box (check the connectors behind the mixer to identify which colour corresponds to which channel)
* 5-6 -> Default Linked channels (usually used for paired channels like DJ mixer)
* 9-16 -> Nothing Connected&#x20;

Channel 17-32 are assigned to Digital Inputs (getting sound as a sound card from studio's Mac Mini)

* 17-18 -> studio's Mac Mini general main out (e.g. Spotify, QuickTime Player, Audacity, YouTube from Brave/Safari/Google Chrome, etc.)
* 19-20 -> Audio **from** Call-in (Please refer to the "Call-in (Video Call) & Loopback" page)
* 21-32 -> Audio output channels 5-16 from studio's Mac Mini, nothing assigned by default

AUX IN 1-2 -> Mini Jack cable lying next to the console (can be used for connecting external device like computer and phone).

AUX IN 3-6 -> Nothing Connected

**Outputs**

Channel 1-8 are assigned to Analog Outputs (XLR output 1-8 behind the Mixer)

* 1-2 -> Studio monitor speakers (KRKs)
* 3-4 -> Passage (outside radio)
* 5-8 -> Not Connected

Channel 9-16 are assigned to Digital Output (sending sound as a sound card to studio's Mac Mini)

* 9-10 -> Audio feedback to Call-in (Please refer to the "Call-in (Video Call)" page)&#x20;
* 11-12 -> Not assigned
* 13-16 -> Not assigned (FX buses)

MAIN Output Channels (fader on the most right) serve as the output channels for the radio stream, and are connected from XLR output at the back of the console to radio server's sound card through XLR-Jack cables.&#x20;

* **IMPORTANT** - The MAIN output should keep under -12dB to avoid distortion. The level can be monitored on the meter on the right of the screen on the top right of the console.

**Monitoring**

The audio engineer can always monitor the stream through headphone attached in front of the mixing console.&#x20;

The headphone amplifier installed on the rig in the middle of the room is also connected to the mixer's MAIN Output channels, which allows additional headphones to be connected for monitoring what is being broadcasted by the host or guests in the room.


# Sound Card

Scene "Radio\_Default" updated on 7.10.2025

The mixing console Behringer X32 Producer in the Radio Angrezi studio has a sound card module connected which allows it to function as an audio interface with the studio's Mac Mini through USB connection. The studio's Mac Mini should set this (recognised as "X-USB" on the computer) as the default audio output device **at all time**.  It can be done by clicking the speaker icon on the top right part of the computer.

As a sound card, the routing is set up as following:

**Input Channels**

* 1-16 receive audio directly from the Analog Inputs (XLR input 1-16 behind the Mixer) as pre-fader signal (signal is not affected by the faders)
* 17-18 receive audio from the mixer's Output Channel 9-10 (for audio **to** Call-in during a call-in session (Please refer to the "Call-in (Video Call) & Loopback" page))
* 19-24 are not assigned
* 25-26 receive audio from the mixer's Output Channel 1-2 (Studio Monitor output channels) - post-fader (signal is affected by the output fader)
* 27-28 receive audio from the mixer's Output Channel 3-4 (Passage output channels) - post-fader
* 29-30 receive audio from the mixer's Output Channel 5-6 - post-fader
* 31-32 receive audio from the mixer's MAIN Output (Stream) - post-fader

**Output Channels**

* 1-2 -> Mixer Input Channel 17-18 (Main computer output)
* 3-4 -> Mixer Input Channel 19-20 (for audio **from** Call-in during call-in session (Please refer to the "Call-in (Video Call) & Loopback" page))
* 5-16 -> Mixer Input Channel 21-32 (Not assigned)


# Call-In (Video Call) & Loopback

Call-In Option through Video Call

Since the Telephony has not been functional since 2021, a new way has been implemented to allow listeners to call in and talk with the host during broadcast via video call programs like Zoom, Telegram, Jitsi, etc.&#x20;

For this setup to work, an application called **Loopback** is installed in the studio's Mac Mini which allows virtual audio routing. A default patch named "Call-in Routing" is created to connect audio for Call-in session. This patch should be enabled at all time.&#x20;

**Workflow**

1. Guest(s) call in via video call (e.g. Zoom) to the studio's Mac Mini&#x20;
2. Audio from the guest(s) are routed to the studio mixer and mixed to the broadcasted audio stream with other materials (music, host talking, etc.)
3. A separate mix **EXCLUDING** the call-in guests' audio is route back from the mixer to the video call application (e.g. Zoom), so that call-in guest can hear what is broadcasted at the moment excluding their voices and react to the situation.

**Setup**

Before starting to mix, please make sure:

1. studio's Mac Mini&#x20;

* Make sure the computer's default audio output device is set to "X-USB" (which is the mixer). It can be done by clicking the speaker icon on the top right part of the computer.

2. Loopback&#x20;

* Device on the left "Call-in Routing" is **enabled**.&#x20;
* In the device "Call-in Routing" at the "Sources" column on the left, please **enable** the application you are using for video call (e.g. Zoom, Telegram, Brave Browser (if you are using a browser based video call like Google Meet in this browser)), make sure it is connected to the "Channels 3 & 4" in the middle column called "Output Channels" and nothing else, and press the drop down "Option" of this source and make sure "Mute when capturing" is **CHECKED**
* If your application used for video call is not already displayed, make sure your application is open, and then press the "+" button next to "Sources" and select it. The new source you selected will appear below. **Disconnect** it from "Channels 1 & 2" and connect it to "Channels 3 & 4"
* Make sure all the other applications in the "Sources" **EXCLUDING** "X-USB" is **disabled**
* The Loopback application does not need to be opened during the session, but the device "Call-in Routing" needs to be enabled even when you close the application

3. Video call application&#x20;

* Set the Audio Input in your call to "Call-in Routing"
* The output doesn't really matter since Loopback will mute it, you can set it to the "Mac mini Speakers" just to be safe

**Mixing**

During the session, the audio engineer should prepare and manage two separate mixes - 1) one mix for the broadcast stream (what the listener will actually hear), and 2) a separate mix for the call-in guest(s) via video call application (e.g. Zoom).

The broadcast stream (sending to the **MAIN** stream) should include:

* Music being played (e.g. from the studio's Mac Mini (input ch. 17-18 of the mixer), microphone of the host and people in the room (e.g. input ch. 1-8 of the mixer), etc.)
* Audio **from** call-in guest (video call application) - Input Channel 19-20

The mix for the call-in guest(s) (sending to **output channel 9-10** on the mixer) should include:

* Music being played (e.g. from the studio's Mac Mini (input ch. 17-18 of the mixer), microphone of the host and people in the room (e.g. input ch. 1-8 of the mixer), etc.)&#x20;
  * **CAUTION!!** - Input Channel 19-20 **must NOT** be included, otherwise it will cause feedback.

**Monitoring**&#x20;

Host/guests in the Radio Studio are highly encouraged to use headphones through the Headphone amplifier to avoid any feedback between the microphones, speakers, and the call-in stream.&#x20;


# Mobile Studio "Moped"

The **mobile studio** is basicly the studio at Speicher XI in a rack *on wheels*. With a stable internet connection and power provieded you can use it to do *radio everywhere.* Be sure to pack additional microfphone, headphones, headphone ambilfiers and a laptop with it.

The unit was orginally custom build for the Venice Biennale and other events in summer 2019.

![construction sketch draft (2019)](/files/-McV6jXzglz4cscsXfJO)

{% tabs %}
{% tab title="Top View" %}
![](/files/-McV8q9tOaBq25ZT1V8J)
{% endtab %}

{% tab title="Front View" %}
![](/files/-McV94mOzi2wZkkPvqm5)
{% endtab %}
{% endtabs %}

## Streaming form the mobile unit

1. **Setup** the mobile studio on location
2. Supply **Power**
3. Supply a **wired LAN** connection to the WAN port. The default config requires that the host network (the one you are connecting to) provides a IP-Adress via DHCP and an internet connection without firewall limiations (espacially not on port `8001`).
4. **Turn on** the built-in router, if it is turned off, using the round button labeled "Power".
5. Turn on the mixer on the back.
6. Connection is established if both **PWR**, **LINK** and **LAN** led are glowing in green, on the hardware streamer.
7. Connect your laptop to the on-board **WiFi**. SSID: `Radio Angrezi`, Password: `radioangrezi`
8. Enjoy streaming!
9. Pro Tip: Record on loction using a mobile recorder (e.g. Zoom H4)

*The router does allow for many other configurations, including connecting to a host wifi network, instead of using the cable connection.*

#### Issues?! Check these things:

1. Is the source on the streaming server available (see below)?
2. Is the internet connection working? Try to use [speedtest.net](http://speedtest.net) and ping `stream.radioangrezi.de`
3. Is port `8001` reachable?
4. Does your input **signal** work and is recieved at the **hardware streamer**?
5. Is the `master source` turned **on**?
6. Is the limiter / compressor **on**?

#### Usefull links when using the unit:

* configuration for [DEVA hardware streamer ](http://192.168.133.2/)(192.168.133.2), incl. on-board **level meter**
* configuration for [on-board router](http://192.168.133.1) (192.168.133.1)
* access to [chat / shoutbox](http://talk.radioangrezi.de/studio.html)
* server side / client level meter (not great)
* connecting / disconnecting the Studio at Speicher XI from the source via [Monit server monitoring](http://studio.radioangrezi.de:2812/darkice)
* [studio backend](http://studio.radioangrezi.de/) to check if the master source is **on** or **off.**
* [server side recorder](http://studio.radioangrezi.de/controller/)

#### Setting up the correct source on the streaming server

{% hint style="danger" %}
The mobile studio is currently connecting to the *master source* as well:\
**Either the mobile studio or the studio at Speicher XI can connect to the stream source at the same time.**
{% endhint %}

If you want to **connect the mobile studio** to the stream stop the [darkice service](http://studio.radioangrezi.de:2812/darkice) on the server and plugin in the mobile studio / encoder.\
If you want to **connect the studio** at Speicher XI to the stream, disconnect the mobile studio and reactivate the [darkice service](http://studio.radioangrezi.de:2812/darkice).\
As long as the source is in use, darkice will not start or the mobile studio will fail to connect.

## Equipment on Board

* Mixer: A\&H ZED-14
* Limiter/Compressor: Behringer MDX2600 v2
* Streamer: Deva DB91-TX
* Router: Asus RT N66U with DD-WRT (Recorder)
* 2x SM58 Microphones
* 1x Headphones (Audio Technica)
* 1x Phone to recieve phone calls + as soundboard
* TRS + Chinch Cables for other Devices
* LAN cable 3m
* TP-Link 5 port switch
* Cables, Screwdriver, Tape
* printed manuals for hardware on board

## Packing list for Events

* N Microphones
* N Microphone Cables, e.g. 6 m
* N Headphones
* N Headphone cables
* extra headphone for monitoring (on board)
* Headphone amplifier (small rack in the studio)
* Snake / Multicore (also in the studio)
* cables for laptop or instrument input
* LAN cabel, short and long
* extra power cabels and distribtion
* rain cover
* gaffa tape and cable straps
* marketing material and angrezi flag
* extra mobile recorder (e.g. Zoom H4) for extra local recording

## Configuration (for Tech Crew)

{% hint style="info" %}
needs to be extended -- JA, 2021
{% endhint %}

### DEVA

The harware streamer tryes to stream to two endpoints:

* studio.radioangrezi.de:8001&#x20;
* 10.10.10.63:8001 (if in local network)

For both the source `master` and user `source` is used.\
Encoder 1 is cofigured for `MP 3` quality level 4.

On TCP port `5000` the live PCM signal can be recieved. This was origianlly indeded to do local recordnings to the flash memory on the Router.

### Router

The router is working a Gateway / Router, DHCP-Server, DNS-Sever, Samba-Server, WiFi Access Point, ggf. WiFi Client (as Bridge).

The local storage (128 GB) is available from the local network via `local.server.radioangrezi.de` (192.168.133.1). (Name resolution is configured manually with the local dnsmasq.) Sometimes the `NAS` (Samba) settings need to be reapplied to start the server.

You can check your the incoming bandwith at the Server (at home) with: `sudo tcptrack -i enp4s0 port 8001`


# Mobile Broadcasting

Step by step guide for the Mobile Mini-Studio

## **Equipment on Board**

* Mixer: A\&H ZEDi-10
* Headphone Amplifier: LD Systems HPA4
* 4x Headphone Adapter
* 1x Cordial RCA (Cinch) – RCA (Cinch) Cabel
* 1x USB Cabel
* 1x 3-Pin Power Cabel
* 1x 24V Power Cabel

To stream on radioangrezi.de you additionally will need a computer with an internet connection.

## **Preparation**

Before you start with the setup, check if you have fulfilled all the requirements for a home broadcast. For this you can follow the “Step-by-Step from Home” guide in this Radio Angrezi documentation.

The main key points:

* Have you sent a proposal?
* Is your airtime booked?
* Did you get a user account with login credentials?

## Configuration

### Configure Butt

Before you start configuring the setup you need to **install the “Butt” broadcasting** tool on your computer.

Open the settings in Butt and add a new server in the "Main" tab.

* Type: IceCast
* Address: studio.radioangrezi.de
* Port: 8002 (or alternatively: 8080)
* IceCast mountpoint: /show
* The user and password you take over from your user account.

### Interface Drivers

If you are using a Windows computer, you must also **install the correct drivers** for the mixer/interface. You will find these on the [product page](https://www.allen-heath.com/ahproducts/zedi-10/).

### Set-Up

Now you can start to connect the components together:

* **Connect the mixer/interface to the power** with the 3-pin plug. Don't forget to switch it on.
* **Connect the mixer/interface to your computer** with the USB cable.

All Red, Gray and Yellow knobs and faders should be set to 0 at the beginning. All Blue and Orange knobs should be centered at the beginning.

In the Audio tab of the “Butt” Settings, you can now **select the mixer as the audio device**.

* **Connect the headphone amplifier to power** using the 24V power cord.

All knobs should be set to 0 at the beginning.

* **Connect the mixer/interface to the headphone amplifier** with the RCA (Cinch) cable. Use the "Monitors Out" connector on the mixing console for this purpose.

When you are done with the basic setup it should look like this:

![](/files/-M_zn_T3oWOP2dps0OFZ)

Now you can **connect all headphones for monitoring** to the headphone amplifier. If you don't need the included adapter, just put it aside and try not to lose it.

You can now also **connect all microphones, instruments, etc. to the mixer**. If you have never used a mixer before, you might want to look at a few tutorials first.

* You should level each input channel with the Gain & Mix knobs.
* You should level the master mix with the fader.
* You should level your monitor headphones using the “monitors” knob at the mixer and the knobs on the headphone amplifier.

If everything is properly levelled, your mix should sound good. The mixer and Butt should show a maximum level of just under 0db.

Check everything three times and then **hit play on Butt and**

## **Enjoy!**

your broadcast.

Before you start with the broadcast you should **listen to radioangrezi.de for a test.**

Keep an eye on the **shoutbox** on the website. You can also use the studio view: <http://talk.radioangrezi.de/studio.html>

(If you run **overtime** your slot must be prolonged, otherwise you will be kicked out of the stream.)

Don't forget to record.


# Studio Speicher XI

The studio at Speicher XI is our *home base*. It is used as a radio studio (obviously), event space, meeting room, office and living room, of some kind.

You can find the [house rules](/kollektiv/studio-space) on a separate page. This page is a about the **technical things** in the studio.

You can find an [inventory of all our equipment](https://hfkbremen.sharepoint.com/:x:/s/angrezihq/EdADVpDr97xCoYQ3o4-AbI0B5CA-dSOOWclI3JIwAjWvxQ?e=m1at32), not limited to the studio specifically, online. Please have a look and contribute to keep it up to date, including location and info on status / functionality.

**We do not lend out equipment.** If we use it for external productions, we have to keep track, that all removed items actually do return. If you **take&#x20;*****anything*****&#x20;from the studio**, please write a e-mail to <tech@radioangrezi.de>.

### **Overview**

* Allen & Heath ZED-428 28-Kanal Mischpult
* 7 Shure SRH 840 studio headphones
* 6 Shure SM58 (including the ones in the mobile unit)
* 2 NT2-A condensor microphones (desk mounted)
* 2 monitor speakers&#x20;
* 6 channel multi core (XLR)
* Compressor / Limiter Behringer MDX4600 Multicom Pro-XL V2 (in desk rack)
* Headphone amplifier (in extra 2U case)
* MacMini with 2 screens (desk mounted) and one guest screen
* 2 speakers in front of the studio / in the passage
* a laser printer
* 1 Pioneer DJM-400 DJ-mixer (borrowed from AStA)
* 1 Technics 1200MK2 turntables (borrowed from AStA)

### Utilities

* a very old and very cheap PA
* 2 Audio over IP interfaces Neutrik NA2-IO-DLINE

### Room Utilities

* Dish Washer
* Sink
* Boiler

Again, [inventory of all our equipment](https://hfkbremen.sharepoint.com/:x:/s/angrezihq/EdADVpDr97xCoYQ3o4-AbI0B5CA-dSOOWclI3JIwAjWvxQ?e=m1at32),

## **Configuration**

### Mixer

### MacMini

Static IP (in VLAN `Lehre-Client`): \`10.10.22.100 (Subnet: 255.255.254.0, Gateway: 10.10.22.3, DNS: 172.16.0.8+9) (DNS: studio-01.local.radioangrezi.de)

Connect to MacMini remotly: `ssh server.radioangrezi.de -L 5901:10.10.22.100:5900`

#### Audio Routing on Mac

The Mac currently has two audio interfaces:

**1) UMC 404 HD (4 IN / 4 OUT)**

UMC is used as main out to the mixer (CH 1 + 2) and configured as **default output device** in OSX. Inputs are currently only used for telephony.

CH 3 + 4 are usually not easily accessible in the OS, because the don't show up as a seperate device. That is why we split the device virtually to a seperate (aggregate) device (called `UMC404HD 192k Ch 3/4 Out`) in `Audio Midi Setup`.

**CH 3** is used as OUT for the **telephony** software, and is routed into a seperate channel on the mixer.

Here is the documentation of out the channel routing is set up:

![](/files/-LumPFE6yMC5wMpOS7p6)

![](/files/-LumPFE9NETr6ZQVkDjc)

This could also work the other way arround, for inputs. [Maybe](https://apple.stackexchange.com/questions/271164/split-input-channels-using-soundflower-and-aulab).

**2) Built-in (2 IN / 2 OUT)**

CH 1 + 2 Out: Used for **ringer of the telephpny client** (using the build in MacMini Speaker, not plugged in).

## Stream Out

## Stream Monitor

## Speaker Out

## Bar Setup

For Angrezi Thursdays we have set up "a studio" at a bar. This is a quick overview:

* Multicore (6 Channel) at the Bar + up to 6 Microphones
* Headphone Amp at the Bar + up to 6 Headphones
* Dante + POE Injector at the Bar for Turntables / Mixer-Out, patched to `Lehre-Client` (MacMini also temporarily patched to `Lehre-Client`)
* Studio Monitore patched to Aux 5 + 6 and Mics on Monitor

## Printer

We have a printer in the Studio. Whooo! (**HP LaserJet 1320**) The printer is directly connected to `Client-Lehre`, you an print from there. We also now run CUPS printserver on the Server, so you can actually print from WiFi (and the Internet) as well: `ipp://server.radioangrezi.de:631/printers/Angrezi-Laser-A4` (Firewalled for access from 10.10.0.0/16 only.)


# Web-Player Embed

We have a little embed player that you can put everywhere you want. It's *beta*.

```
http://embed.radioangrezi.de/embed-v1.html
```

Example Embed via iframe:

```markup
<iframe src="//embed.radioangrezi.de/embed-v1.html"; name="Radio Angrezi" height="105" width="100%" scrolling="no" marginheight="0" marginwidth="0" frameborder="0">
</iframe>
```

Demo: <https://jsfiddle.net/s95pLk61/>


# Shoutbox  / Angrezi Chat

further info on the infamous shoutbox on our website.

There is a chat-box on the angrezi website ([www.radioangrezi.de](http://www.radioangrezi.de)), which can be unfold by clicking on "Angrezi Chat" button on the bottom of the page. \
It's open for everyone to use. This means no log-in or registration is necessary. \
There is a field for nickname and the message text. The nickname can be changed everytime you want to write a new message.

**You can also open the chat in seperate tab or browser window following these links:**

<http://talk.radioangrezi.de/studio.html>\
*For a dark mode design and improved read-ability (for example on a seperate computer screen) use this link.*

<http://talk.radioangrezi.de/embed.html>\
*For public presentation (for example a festival, where audience is also present at the place you are broadcasting), you can use this link for classic angrezi design freshness... :)*<br>

## Administration / Backend

There is the option to adjust settings and to moderate the chat in a backend:\
<http://talk.radioangrezi.de/cp/>\
\
It only needs a password to access *(passwords can be found in the angrezi one drive. Please ask or let other people from the HQ know, if you plan to do so.)*

### Hosting / Moderating the chat

There is situations and formats that might need the participants to interact with the chat or having someone hosting the chat as a mod.\
\
Once you logged in to the backend, open another tab/browser window with the separate chat (use the links shown in the beginning of this page!). \
As you hover over the messages now, you will now also see extended options to delete messages or ban users.\
**(ATTENTION: You need to be logged into the backend first, before these options appear!)**<br>


# Mailinglists

We do have several mailing list for internal and external communication. This page will sort out what lists exists, and how do manage them.

*A short reminder: Email is, for now, the most inclusive and reliable (even if everybody hates it). Even if you use instant messaging services, please do consider sending an email.*

## Lists

<RA-hq@radioangrezi.de>\
Members: the plenum, the core of the Angrezi collective.\
Reachable: Publicly\
New members: By invitation only, sign-out by administrator\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-hq>

(These people should also have access to the **Sharepoint group** hosted with the HfK. Remember that **memberships** in the mailing list and the Sharepoint group are now separated and need to be **managed individually**.)

**This was <angrezihq@hfkbremen.onmicrosoft.com> previously. Please do NOT use that any more!**

<RA-friends@radioangrezi.de>\
Members: people that are or were in one way or another involved with Angrezi: Old plenum members, people from courses, people that are interested, externals.\
Reachable: Publicly\
New members: Sign-In and Out yourself\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-friends>

**This was <radioangrezi-people@hfkbremen.onmicrosoft.com> previously. Please do NOT use that any more!**

<RA-artists@radioangrezi.de>\
Members: People that contributed to the programme. That is simple!\
Reachable: Publicly\
New members: by invitation, sign-out yourself\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-artists>

<RA-promotion@radioangrezi.de>\
Members: People that should get our broadcasts announcements: Press departments, cooperation partners, other radios, venues in Bremen. Also Telegram: <https://t.me/radioangrezi>\
Reachable: Publicly\
New members: by invitation, sign-out yourself\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-promotion>

<RA-tech@radioangrezi.de>\
Members: People that run / keep running / make / develop the studio / the infrastructure. Reachable: Publicly\
New members: by invitation, sign-out yourself\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-tech>

<RA-engineers@radioangrezi.de>\
Members: People that are trained to do engineering, and available. New members: by invitation, sign-out yourself\
Administration: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/admin/ra-engineers>

## Mailman server

For a lack of a better solution (or a different domain provider, which is scheduled to change in Jan 2020) the mailing lists are hosted for free with mailman at the University of Bremen.

Since Jelko did not like to have addresses ending with `@mailman.zfn.uni-bremen.de` he cheated his way around build forwards form `@radioangrezi.de` to the mailman server. (Due to restrictions with one.com we could not realize list addresses with `@lists.radioangrezi.de` which would make future changes much easier.)

DNS MX record for radioangrezi.de: one.com mailserver

**All lists are forwarded by hand at one.com!**

* <RA-hq@radioangrezi.de> → <RA-HQ@mailman.zfn.uni-bremen.de>
* <RA-friends@radioangrezi.de> → <RA-friends@mailman.zfn.uni-bremen.de>
* <RA-artists@radioangrezi.de> → <RA-artists@mailman.zfn.uni-bremen.de>
* <RA-promotion@radioangrezi.de> → <RA-promotion@mailman.zfn.uni-bremen.de>
* <RA-tech@radioangrezi.de> → <RA-tech@mailman.zfn.uni-bremen.de>
* <RA-engineers@radioangrezi.de> → <RA-engineers@mailman.zfn.uni-bremen.de>

Schema: <x@radioangrezi.de> → x'@mailman.zfn.uni-bremen.de\
**x and x' need to match!** Because:

At each mailman list `radioangrezi.de` is set as `host_name`. This way the list actually seems to be running on radioangrezi.de, and not at the University. It's a hack. Actually it would be nice to have a mailman (or similar) that actually allows CNAMEing at `lists.radioangrezi.de` for example.

**Conclusion: If you add lists. You need to add forwards!**

-owner and -bounce -request -join -leave are **not forwarded so far**! That might cause a ton of problems. Let's see! ;)

In the beginning we created a few more lists. So currently (2019-03-25) we got (freshly signed up, not configured):

RA-artists\
RA-communication\
RA-friends\
RA-hq\
RA-plenum\
RA-programme\
RA-promotion\
RA-tech RA-engineers

from: <https://mailman.zfn.uni-bremen.de/cgi-bin/mailman/listinfo>

## list configuration cheat sheet

Configuration:

### General Options

real\_name = RA-… owner = <radioangrezi@hfk-bremen.de> host\_name = radioangrezi.de new\_member\_options = 1: Y 2: N 3: Y 4: Y max\_message\_size = 0

### Passwords

admin pw: (the one mailing list password)

### Language options

preferred\_language = english

### Non-digest options

msg\_footer:

`📻`

`THIS IS RADIO ANGREZI`

`more specifically the %(real_name)s@%(host_name)s mailing list. list info / unsubsribe at %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s`

### Privacy options...

\[Subscription rules]

subscribe\_policy = unsubscribe\_policy =

\[Sender filters] generic\_nonmember\_action = Accept (Sure?)

\[Recipient filters] require\_explicit\_destination = No max\_num\_recipients = 50

topics = Probably no, testing on RA-hq

### Texts

Welcome email text file

`WELCOME TO RADIO ANGREZI`

`You are now a member of the %(real_name)s@%(host_name)s mailing list! %(welcome)s To post to this list, send your message to:`

`%(emailaddr)s`

`General information about the mailing list is at:`

`%(listinfo_url)s`

`Any questions? Reach out to radioangrezi@hfk-bremen.de`

`Nice to have you!`


# Known Issues

Also check Airtime's / LibreTime's [troubleshooting page](https://libretime.org/manual/troubleshooting/).

## Known log file locations

`/var/log/airtime/pypo-liquidsoap`\
`/var/log/airtime/pypo/notify.log`\
`/var/log/airtime/zendlog.log`

### Status

The [status page in Airtime](http://studio.radioangrezi.de/systemstatus) does not show a status for some services: `airtime_analyzer`, `airtime-playout`, `airtime-liquidsoap`. The services might be running correctly though. You can check via our [own monitoring](http://studio.radioangrezi.de:2812/) or `service SERVICE-NAME status` and `journalctl -u SERVICE-NAME | tail`

## Error 500 / No PHP logs

You would suspect PHP logs in `/var/log/airtime/zendlog.log`. But there is none (or it is not up to date). Check `/var/log/apache2/error.log`: It might show:

```
[Mon Dec 16 16:36:41.959122 2019] [:error] [pid 26398] [client 127.0.0.1:39688] PHP Fatal error:  Uncaught exception 'Zend_Log_Exception' with message '"/var/log/airtime/zendphp.log" cannot be opened with mode "a"' in /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Log/Writer/Stream.php:81\nStack trace:\n#0 /usr/share/airtime/php/airtime_mvc/application/logging/Logging.php(11): Zend_Log_Writer_Stream->__construct('/var/log/airtim...')\n#1 /usr/share/airtime/php/airtime_mvc/application/logging/Logging.php(83): Logging::getLogger()\n#2 /usr/share/airtime/php/airtime_mvc/application/logging/Logging.php(166): Logging::error('Uncaught except...')\n#3 [internal function]: Logging::loggingShutdownCallback()\n#4 {main}\n  thrown in /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Log/Writer/Stream.php on line 81
```

Check the permissions on `/var/log/airtime/zendlog.log`. It should be 0777, probably.

## DNS Problems

2019-05-20

Recently the HfK-network experienced issues with its DNS Servers (172.16.0.1 + 172.16.0.2). Local streaming services (darkice, airtime, icecast) were affecetd. Resolved by adding additional 3rd-party DNS Servers form Digitalcourage (46.182.19.48) + Chaos Computer Club (213.73.91.35) to /etc/netplan/XX.yaml.

## RabbitMQ hostname changes

2019-05-31

form: <https://libretime.org/manual/troubleshooting/>

If the Airtime logs indicate failures to connect to the RabbitMQ server, such as:

```
2013-10-31 08:21:11,255 ERROR - [pypomessagehandler.py : main() : line 
99] - Error connecting to RabbitMQ Server. Trying again in few seconds
2013-10-31 08:21:11,255 ERROR - [pypomessagehandler.py : main() : line 99] - Error connecting to RabbitMQ Server. Trying again in few seconds - See more at: http://forum.sourcefabric.org/discussion/16050/#sthash.W8OJrNFm.dpuf
```

but the RabbitMQ server is running normally, this error might be due to a change in the server's hostname since Airtime installation. Directory names under /var/lib/rabbitmq/mnesia/ indicate that RabbitMQ's database files are organised according to the hostname of the server, for example:

```
rabbit@airtime
```

where the hostname is airtime.example.com. If the hostname has changed, it may be necessary to reconfigure RabbitMQ manually, as follows:

Delete the files in /var/lib/rabbitmq/mnesia/

```
sudo rm -r /var/lib/rabbitmq/mnesia/*
```

Restart RabbitMQ:

```
sudo invoke-rc.d rabbitmq-server restart
```

Enter the following commands to set up authentication and grant permissions. The rabbitmqctl add\_user command requires the RabbitMQ password from the /etc/airtime/airtime.conf file as an argument. The rabbitmqctl set\_permissions command should be entered on one line, with the list of Airtime services repeated three times:

```
rabbitmqctl add_vhost /airtime rabbitmqctl add_user airtime XXXXXXXXXXXXXXXXXXXX
rabbitmqctl set_permissions -p /airtime airtime "airtime-pypo|pypo-fetch|airtime-analyzer|media-monitor"   "airtime-pypo|pypo-fetch|airtime-analyzer|media-monitor"  "airtime-pypo|pypo-fetch|airtime-analyzer|media-monitor"
```

## PHP Errors

2019-06-01

Libretime logs PHP errors into `/var/log/airtime/zendphp.log` You can use Libretimes log controller to add custom log statements to the code. (Native `echo()` and `print_r()` will not help much.) Use `Logging::error()`, `Logging::warn()`, `Logging::info()` or `Logging::debug()` from anywhere in the Libretime codebase.

## Error 500 in airtime-playout (pypo) and `Invalid argument supplied for foreach()` zendphp.log

2019-06-21

### Phenomenon

airtime-playout (`sudo -u www-data python /usr/bin/airtime-playout`) is outputting 500 errors for all API requests:

```
2019-06-01 19:36:06,106 [listenerstat] [ERROR]  Exception: HTTP Error 500: Internal Server Error
2019-06-01 19:38:06,323 [api_client] [ERROR]  HTTP Error 500: Internal Server Error
2019-06-01 19:38:06,373 [api_client] [ERROR]  HTTP Error 500: Internal Server Error
```

zendphp.log is showing errors like:

```
2019-06-01T19:36:06+00:00 ERR (3): studio.radioangrezi.de [ErrorController.php:54 - errorAction()] - An internal application error has occurred.: exception 'ErrorException' with message 'Invalid argument supplied for foreach()' in /usr/share/airtime/php/airtime_mvc/application/models/ListenerStat.php:98
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Invalid argumen...', '/usr/share/airt...', 98, Array)
#1 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Log.php(636): call_user_func('exception_error...', 2, 'Invalid argumen...', '/usr/share/airt...', 98, Array)
#2 /usr/share/airtime/php/airtime_mvc/application/models/ListenerStat.php(98): Zend_Log->errorHandler(2, 'Invalid argumen...', '/usr/share/airt...', 98, Array)
#3 /usr/share/airtime/php/airtime_mvc/application/controllers/ApiController.php(1273): Application_Model_ListenerStat::insertDataPoints(NULL)
#4 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Controller/Action.php(516): ApiController->pushStreamStatsAction()
#5 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('pushStreamStats...')
#6 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php(105): Zend_Controller_Front->dispatch()
#8 /usr/share/airtime/php/vendor/zendframework/zendframework1/library/Zend/Application.php(384): Zend_Application_Bootstrap_Bootstrap->run()
#9 /usr/share/airtime/php/airtime_mvc/application/airtime-boot.php(84): Zend_Application->run()
#10 /usr/share/airtime/php/airtime_mvc/public/index.php(68): require_once('/usr/share/airt...')
#11 {main}
`
```

for `ListenerStat.php:98` and `ApiController.php:1870`

### Not-the-solution

* Checked files: `ListenerStat.php` and `ApiController.php` -> POST getParams() always empty. -> no data -> null / true object (which is not iterable).
* Also checked: `airtime-playout.py` / `listenerstat.py` and `api_client.py` -> all not faulty, because dumped (tcpdump) http packets showed correct payload.
* Notices on the side, but not related: `SQLSTATE[55P03]: Lock not available: 7 ERROR: could not obtain lock on row in relation "cc_pref"` ([#465](https://github.com/LibreTime/libretime/issues/465))
* in place updated of Airtime / Libretime will not be easy. ([#623](https://github.com/LibreTime/libretime/issues/623))

### Solution

The hostname and default apache vhost was changed. Since than the error occured. Apache was 301 forwarding requests made to `anregzistudio.hfk-bremen.de` to `studio.radioangrezi.de`. POST data is lost when forwarding!

Put correct hostname in `base_url` of `/etc/airtime.conf`. This would go for a port change as well (e.g. HTTPS)!

```
  3 [general]
  4 api_key = ...
  5 web_server_user = www-data
  6 base_url = studio.radioangrezi.de
  7 base_port = 80
```

### Helpful

* Dump local http requests with payload: `sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -i lo`
* ["Looks like your POST data get lost when redirecting"](https://stackoverflow.com/a/3654142)
* [Very similar issue: Wrong port, not wrong hostname.](https://github.com/LibreTime/libretime/issues/749)
* [Also simmilar: Wrong hostname in /etc/hosts](https://github.com/LibreTime/libretime/issues/299)

## "Getting information from the server..."

Airtime shows only "Getting information from the server..." on the [stream preferences page](http://studio.radioangrezi.de/preference/stream-setting).&#x20;

```
Traceback (most recent call last):
   File "/usr/bin/pyponotify", line 4, in <module>
     __import__('pkg_resources').run_script('airtime-playout==1.0', 'pyponotify')
   File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 664, in run_script
     self.require(requires)[0].run_script(script_name, ns)
   File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1444, in run_script
     exec(code, namespace, namespace)
   File "/usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/EGG-INFO/scripts/pyponotify", line 6
     backupCount=8)
   File "/usr/lib/python2.7/logging/handlers.py", line 117, in __init__
     BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
   File "/usr/lib/python2.7/logging/handlers.py", line 64, in __init__
     logging.FileHandler.__init__(self, filename, mode, encoding, delay)
   File "/usr/lib/python2.7/logging/__init__.py", line 920, in __init__
     StreamHandler.__init__(self, self._open())
   File "/usr/lib/python2.7/logging/__init__.py", line 950, in _open
     stream = open(self.baseFilename, self.mode)
 IOError: [Errno 2] No such file or directory: '/var/log/airtime/pypo/notify.log'

```

**Resolution**: Log files could not be written. Add log directory and give write permissions.


# Radio Weser TV

Latenz (von Lukas C. zuhause bis zum Stream und dann zu Jelko nach Hause, gemessen am 2020-04-09): **00:00:16:24**.


# Deployment

Deployment system for the radio angrezi server.

## Introduction

We have a few custom services running on our services, custom in the sense that they are programmed from scratch and continually developed. This deployment-system allows us to test, ship new code, and restart the service automatically.

Our deployment-system is a set of custom bash-scripts which run on our server and are triggered from github, where we store our code.

The deployment is triggered at the end of a successfully run testing chain which is built with github actions.

## Step by Step: How to deploy a new service

In order to explain the deployment chain we will bring forth all the steps needed to deploy a new service with this system.

##

### -. Preconditions

{% hint style="success" %}

1. your sourcecode has its own repository within our github organization.
2. the repository is public
3. the repository has access to our self-hosted action runner.\
   (please ask an organization-owner to grant this access)
   {% endhint %}

### I. Creating a github workflow

In your repository go to tab **Actions** and setup the **Deploy to Angrezi Servers** workflow.&#x20;

<div align="left"><img src="/files/-MD55-AImGPRRlr5ftDl" alt="Click &#x22;Set up this workflow&#x22; and commit the new file"></div>

You dont need to change anything here but can add further steps to this workflow for example to build and test your application.&#x20;

{% hint style="info" %}
Have a look at other angrezi-services to better understand \
how we use github actions.
{% endhint %}

### II. Setting up the .environment folder

Our deployment expects a `.environment` folder to be present in the root folder of your repository.\
This folder contains all files which are bound to angrezis server environment. \
Usually systemd-service files, other configuration and a deploy script are situated here.

### III. Creating a Deploy-script

Create a file `./environment/deploy.sh`&#x20;

This file well be automatically called at the end of a successful github-action workflow. \
You have access to  a few environment variables in your script:

| DEPLOY\_REPO\_NAME |                               |
| ------------------ | ----------------------------- |
|                    | # accessible var DEPLOY\_DEST |
|                    | # accessible var DEPLOY\_FROM |

### IV. Setting up the service on angrezi-server

Log in to server.radioangrezi.de and run `sudo setup-service [service-name]` .\
this will copy all the environment-files into `/opt/services/[service-name]` and symlink a few known configuration files automatically.

**.service** will be linked and enabled as a systemd service.\
**.monit-conf** will be linked as a monit config file.

{% hint style="info" %}
You have to link all other configuration files manually.
{% endhint %}

{% hint style="info" %}
Each time you make changes to files in `.environment/` you have to call `setup-service` again for your changes to take effect. \
This is a security measure.
{% endhint %}

### V. Push Code-changes to your repository


# Services


# Streaming Icecast

## Icecast

## Airtime

Logs in `var/log/airtime/zendphp.log` (Check here if you see the "Oops!" page.)

Known Issues:

* RabbitMQ Server not started (in log: `An internal application error has occurred.: exception 'ErrorException' with message 'stream_socket_client(): unable to connect to tcp://127.0.0.1:5672 (Connection refused)` -> solution: `service rabbitmq-server start`
* If RabbitMQ is not started, liquidsoap does not work. Restart it!


# upload.radioangrezi.de

A dedicated uploader service

[upload.radioangrezi.de](/tech-deep-dive/services/upload.radioangrezi.de) is a modular system build around the open source [**tus**](https://tus.io) protocol for resumable file uploads. It consists of three systemd services which are explained below in greater detail.

{% hint style="danger" %}
currently everyone can upload files without further restrictions.\
only .wav, .ogg, .mp3 files can be imported into libretime though.
{% endhint %}

#### tusd

|              |                                                                                                |
| ------------ | ---------------------------------------------------------------------------------------------- |
| Description  | A server implementation for the tus protocol written in go. sends events to angrezi-tusd-hooks |
| Repository   | <https://github.com/tus/tusd>                                                                  |
| Directory    | `/usr/local/sbin/tusd`                                                                         |
| Systemd File | `/var/angrezi/angrezi-tusd-hooks/tusd.service`                                                 |
| Exposed at   | <http://upload.radioangrezi.de/files> via reverse proxy                                        |

#### angrezi-tusd-hooks

|             |                                                                                                                                                                                                                                     |
| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Description | <p>A locally running webserver which is called by <code>tusd</code> if a state of an upload changes.</p><p>Currently is triggers when an upload is finished, renames the file to its original name and imports it to libetrime.</p> |
| Repository  | <https://github.com/radioangrezi/angrezi-tusd-hooks>                                                                                                                                                                                |
| Directory   | `/var/angrezi/angrezi-tusd-hooks/`                                                                                                                                                                                                  |
| .service    | `/var/angrezi/angrezi-tusd-hooks/angrezi-tusd-hooks.service`                                                                                                                                                                        |
| .env        | `/var/angrezi/angrezi-tusd-hooks/.env`                                                                                                                                                                                              |
| Exposed at  | only locally                                                                                                                                                                                                                        |

###

#### angrezi-uploader

|             |                                                                                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Description | <p>A javascript web client build around <a href="https://uppy.io"><https://uppy.io></a>.</p><p>The <code>dist</code> folder is served at <a href="/pages/-M6V3DZVyL3gHKV3iXEy"><http://upload.radioangrezi.de> </a>.</p> |
| Repository  | <https://github.com/radioangrezi/angrezi-uploader>                                                                                                                                                                       |
| Directory   | `/var/angrezi/angrezi-uploader`                                                                                                                                                                                          |
| .conf       | `/var/angrezi/angrezi-uploader/angrezi-uploader.conf`                                                                                                                                                                    |
| Exposed at  | <http://upload.radioangrezi.de/>                                                                                                                                                                                         |


# VU-Meter

To level the audio going to the stream is still a challenge, especially broadcasting from home. You can now find a little helper, an online level meter for the output stream, here:

<http://studio.radioangrezi.de/vu-meter/>

Please note:

1. This VU-meter is downloading the stream and will process it locally in your browser. This means it will use some bandwidth. (This is why I have set the 64kbit “low” stream as a default value.)
2. There is some obvious time delay from you -> server -> transmission -> your computer -> level meter -> processing / calculation.
3. dB-meters are not the only, and definitely not the best way to measure “loudness”.

Source(s):

* <https://p-node.org/documentation/streams/stream-vu-meter>
* <https://github.com/mmckegg/audio-rms>

#### vu-meter

|             |                                                                                        |
| ----------- | -------------------------------------------------------------------------------------- |
| Description | A javascript web client downloading the http icecast stream and calculating the level. |
| Repository  | none                                                                                   |
| Directory   | `/var/www/vu-meter`                                                                    |
| .conf       | `/etc/apache2/sites-enabled/angrezi-libretime_and_controller.conf`                     |
| Exposed at  | <http://studio.radioangrezi.de/vu-meter/>                                              |


# Server

## Hardware / OS

* Dell Precision WorkStation 390
* Intel(R) Core(TM)2 CPU 6600  @ 2.40GHz
* 4GB RAM DDR 667 MHz
* HDD (going to be 4TB 2x)
* with Ubuntu 18.04

## Accounts

* root
* jelko
* luca
* leo

## SSH

SSH is running and available to the internet (!). Only Pubkey authentication is allowed.

## Firewall

`ufw` is administering the firewall rules. Default: **Deny all.** Internal networks: `10.10.0.0/16` (HfK Inhouse) + `192.168.0.0/16` (HfK VPN)

Rules (by 2019-02-04):

```
     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere                  
[ 2] 8080/tcp                   ALLOW IN    Anywhere                  
[ 3] 8000/tcp                   ALLOW IN    Anywhere                  
[ 4] 80/tcp                     ALLOW IN    Anywhere                  
[ 5] 445/tcp                    ALLOW IN    192.168.0.0/16            
[ 6] 445/tcp                    ALLOW IN    10.10.0.0/16              
[ 7] 8001/tcp                   ALLOW IN    Anywhere                  
[ 8] 8002/tcp                   ALLOW IN    Anywhere                  
[ 9] 8088/tcp                   ALLOW IN    10.10.0.0/16              
[10] 5060                       ALLOW IN    10.0.0.0/16               
[11] 5060/udp                   ALLOW IN    10.10.0.0/16              
[12] Anywhere                   ALLOW IN    10.10.0.0/16/udp          
[13] Anywhere                   ALLOW IN    192.168.0.0/16/udp        
[14] 5060/tcp                   ALLOW IN    192.168.0.0/16            
[15] 5038/tcp                   ALLOW IN    192.168.0.0/16            
[16] 5038/tcp                   ALLOW IN    10.10.0.0/16              
[17] 8088/tcp                   ALLOW IN    192.168.0.0/16            
[18] 5039/tcp                   ALLOW IN    192.168.0.0/16            
[19] 9090                       ALLOW IN    10.10.0.0/16              
[20] 2812                       ALLOW IN    10.10.0.0/16              
[21] 8003                       ALLOW IN    Anywhere                  
[22] 2812                       ALLOW IN    192.168.0.0/16            
[23] 5083                       ALLOW IN    192.168.0.0/16            
[24] 5038                       ALLOW IN    192.168.0.0/16            
[25] 8010/tcp                   ALLOW IN    Anywhere                  
[26] 8011/tcp                   ALLOW IN    Anywhere                  
[27] 8012/tcp                   ALLOW IN    Anywhere                  
[28] 8013/tcp                   ALLOW IN    Anywhere                  
[29] 8014/tcp                   ALLOW IN    Anywhere                  
[30] 8015/tcp                   ALLOW IN    Anywhere                  
[31] 8016/tcp                   ALLOW IN    Anywhere                  
[32] 8099                       ALLOW IN    Anywhere                  
[33] 2812/tcp                   ALLOW IN    Anywhere                  
[34] 22/tcp (v6)                ALLOW IN    Anywhere (v6)             
[35] 8080/tcp (v6)              ALLOW IN    Anywhere (v6)             
[36] 8000/tcp (v6)              ALLOW IN    Anywhere (v6)             
[37] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[38] 8001/tcp (v6)              ALLOW IN    Anywhere (v6)             
[39] 8002/tcp (v6)              ALLOW IN    Anywhere (v6)             
[40] 8003 (v6)                  ALLOW IN    Anywhere (v6)             
[41] 8010/tcp (v6)              ALLOW IN    Anywhere (v6)             
[42] 8011/tcp (v6)              ALLOW IN    Anywhere (v6)             
[43] 8012/tcp (v6)              ALLOW IN    Anywhere (v6)             
[44] 8013/tcp (v6)              ALLOW IN    Anywhere (v6)             
[45] 8014/tcp (v6)              ALLOW IN    Anywhere (v6)             
[46] 8015/tcp (v6)              ALLOW IN    Anywhere (v6)             
[47] 8016/tcp (v6)              ALLOW IN    Anywhere (v6)             
[48] 8099 (v6)                  ALLOW IN    Anywhere (v6)             
[49] 2812/tcp (v6)              ALLOW IN    Anywhere (v6)
```

Output active numbered rules: `ufw status numbered`. You may find an [introduction to UFW at Digital Ocean](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands).

### Port Forwarding 8080 -> 8002

Since some organizations-network firewalls block outgoing connections to "unusual" ports (z.B. HBK BS in der Produktion mit der Schwankhalle am 23.05.2021), we have set up an alternative port at `8080`. This is forwarded to 8002 internally using NAT at `/etc/ufw/before.rules`:

```
 11 *nat
 12 :PREROUTING ACCEPT [0:0]
 13 -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 8002
 14 COMMIT
```

Reload with `systemctl restart ufw`

Source: <https://www.cogini.com/blog/port-forwarding-with-iptables/> or <https://serverfault.com/a/238565>

You can monitor incoming bandwith with: `sudo tcptrack -i enp4s0 port 8001`.

## Backup

Backups of the are composited in three stages:

1. Daily staging of changes via rsync
2. Weekly staging of changes via rsync
3. Monthly backup to external HDD via tar

For the monthly backups to happen the Backup HDD (labeled as such) needs to be plugged into the server.

Now on: <https://github.com/radioangrezi/angrezi-backup>

### Cronjobs

The cronjobs are scheduled as such.\
Update (2020-05-06): They are not scheduled in `/etc/cron*` but via monit (!) in `/etc/monit/monitrc` (Group Backup). → Disabled and moved to `/etc/cron.d/angrezi-backup`

```
# m h  dom mon dow   command
0 4 * * * /mnt/backup/daily_backup.sh
0 6 * * 0 /mnt/backup/weekly_backup.sh
0 0 1 * * /mnt/backup/monthly_backup.sh
```

### Locations and Script

Locations backed up: `/etc /var/angrezi /root /boot /opt /usr/local /srv /var/lib /var/mail /var/www /var/backups /var/local /var/opt /var/log`\
Excluded are: `--exclude="*.wav" --exclude=/home/*/.gvfs --exclude=/home/*/.cache --exclude=/home/*/.local/share/Trash --exclude=/media`

The script for montly backup mounts the HDD, stores the last staged weekly changes to the HDD and unmounts the HDD. Do not fiddle with the HDD! If you want to initiate a manual backup, run `./mnt/backup/monthly_backup.sh` as root.

```bash
# Where to backup to
dest="/mnt/angrezi_backup_hdd/$(date +%Y)"

# Create archive filename
date=`date +%Y-%m-%d`
hostname=$(hostname -s)
archive_file="$hostname-$date-backup.tar.xz"
Log="/var/log/backup.log"

echo "" >> $Log
echo "---------------------------------------------------" >> $Log
echo "$date:: Full backup to $dest/$archive_file" >> $Log
now=`date +"%T"`
echo "$now:: starting..." >> $Log
echo "$now:: mounting Backup-HDD with UUID c59e6838-79ae-4994-bf1c-729ff9fae423 to /mnt/angrezi_backup_hdd" >> $Log
    mount UUID="c59e6838-79ae-4994-bf1c-729ff9fae423" /mnt/angrezi_backup_hdd/
    rc=$?
    now=`date +"%T"`

        echo "$now:: Mounting successful" >> $Log

now=`date +"%T"`
echo "$now:: starting backup..." >> $Log
tar -cvpJf "$dest/$archive_file" /mnt/backup/weekly #storing permissions, using xz as compression, verbose
rc=$?
now=`date +"%T"`
if [ $rc != 0 ]; then
    echo "$now:: Backup failed!" >> $Log
    if grep -qs '/mnt/angrezi_backup_hdd ' /proc/mounts; then
        echo "HDD is mounted, Backup still failed" >> $Log
    else
        echo "HDD is not mounted! Is it plugged in?" >> $Log
    fi
    exit 1
else
    echo "$now:: Finished." >> $Log
fi

now=`date +"%T"`
echo "$now:: Unmounting..." >> $Log
umount /mnt/angrezi_backup_hdd

rc=$?
if [ $rc != 0 ]; then
    echo "Unmounting not successful. Yikes. Exiting." >> $Log
else
    echo "Unmounting disc successful. Exiting. Thanks for choosing our services." >> $Log
fi
exit 1
```

## Monitoring

We use `monit` to monitor all "important" services at <http://studio.radioangrezi.de:2812/>.

## Webserver

Domains Mapped:

* stream.radioangrezi.de&#x20;
* server.radioangrezi.de
* studio.radioangrezi.de
* voip.radioangrezi.de

Webservices:

* AirTime
* Angrezi Controller
* Fileserver (Directory Listing with styling)
* Icecast (Port 8000)
* ~~Cockpit (Port 9090)~~

### Angrezi Controller

Self-build controller interface. Source on [GitHub](https://github.com/radioangrezi/live-recorder).

`studio.radioangrezi.de/controller`

## Services

* darkice (installed via `apt` service manually placed in `/etc/systemd/system/darkice.service` and removed in `init.d`)&#x20;
* angrezi-master-recorder (self made)
* angrezi-stream-monitor (self made)
* angrezi-file-watch (self made)

After changes to the services in `/etc/systemd/system/` you can reload them with `systemctl daemon-reload` + `systemctl enable <service name>`

### angrezi-file-watch

`angrezi-file-watch` uses `inotifywatch -m -r -e create` to monitor the directories of recordings. If a file has been created (aka a new show has been recorded) it automatically appends `chattr +a` to prevent deletion.

## Soundcard

* onboard sound card (Intel) disabled in `/etc/modprobe.d/blacklist-angrezi.conf`
* Pulse Audio disabled in `/etc/pulse/client.conf`

Using ALSA with Behringer UMC202HD with following config in asound.conf

```
pcm.stream_in_32 { # the Behringer hardware we use does only support 32 bit by default.
    type dsnoop
    ipc_key 5978293
    ipc_key_add_uid false
    hint.description "Angrezi: USB Card hw1 for Stream IN, 32 bit, dsnooped for mulitple listeners"
    slave {
        pcm "hw:1,0" 
        channels 2
        format S16_LE # this will only affect the plug pcm.stream_in_16.
        rate 44100
    }   
}

pcm.stream_in_16 {
    type plug
    hint.description "Angrezi: USB Card hw1 for Stream IN, 16 bit, dsnooped for mulitpl    e listeners"
    slave.pcm "stream_in_32"
}
```

two capture devices are available:

* `stream_in_32` with S32\_LE (hardware default)
* `stream_in_16` with S16\_LE (software conversion via `plug`)

Test with (software monitor): `arecord -f S16_LE -r44100 -c2 -D stream_in_16 | aplay -D hw:1 -`

## Darkice

The local studio audio in form `stream_in_16` is broadcasted to Icecast via Darkice 1.3. Darkice only supports 16 bit sampling (which makes the downconversion necessary). Recording in DarkIce was disabled after a [bug corrupted the recording on server reconnection](https://github.com/rafael2k/darkice/issues/141) occurred.

This local Darkice stream functions as `master source` in AirTime / liquidsoap.

## Recording

## FM Relay to Radio Weser TV

Radio Weser TV gets a special relay stream out (with a defined URL), which is made to never fail (go silent): `http://stream.radioangrezi.de:8000/live-radioweser`.

The stream is produced by relaying our `live` stream in a seperate liquidsoap instance (service: `angrezi-relay-out-radioweser`) which falls back to a playback of mp3 files if the stream goes silent for more than 10 seconds.

Fallback music (MP3, 44100, min. 192 kbit/s, Stereo) must be placed in `/media/storage/share/Automation/Live-Out-RWTV/Music-MP3/` and fallback Jingles in `/media/storage/share/Automation/Live-Out-RWTV/Jingles-MP3/`. Jingles and Music are randomly picked in the radio 1:5. (If all fallback is empty as well, the script will fallback to a single audio file placed at `/var/angrezi/relay-out-radioweser-fallback.mp3`.)

**Notice: The service needs to be restarted if the music folder is updated.**

TODO: We could add a special config on Icecast so even if liquidsoap fails, there would be a fallback. TODO: Hide the mountpoint from Icecast.


