PHPackages                             remithefox/morse - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. remithefox/morse

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

remithefox/morse
================

Library to generating morse code messages

1.0.0(2y ago)07MITPHPPHP &gt;=8.0

Since May 10Pushed 2y ago1 watchersCompare

[ Source](https://github.com/remithefox/morse)[ Packagist](https://packagist.org/packages/remithefox/morse)[ RSS](/packages/remithefox-morse/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (1)Versions (2)Used By (0)

remithefox/wave
===============

[](#remithefoxwave)

A PHP library that generates morse code to wave file

Installation
------------

[](#installation)

### Composer

[](#composer)

```
$ composer require remithefox/morse
```

Usage
-----

[](#usage)

### Creating wave file object

[](#creating-wave-file-object)

First you need to have object of writable wave file (package `remithefox/wave`). You can open existing file or create new by builder e.g.:

```
use RemiTheFox\Wave\Wave;

$builder = Wave::builder()
    ->setNumberOfChannels(1)
    ->setSampleRate(44100)
    ->setBitsPerSample(8)
    ->setFloatDecorator(true);

$wave = $builder->create(__DIR__ . '/sound.wav');
```

### Creating morse encoder object

[](#creating-morse-encoder-object)

Next you need to create `MorseEncoder` object. e.g.:

```
use RemiTheFox\Morse\MorseEncoder;

// ...

$morse = new MorseEncoder($wave, [0], 20, 700, 1);
```

#### Constructor parameters

[](#constructor-parameters)

parametertypedefaultdescription`$wave``WaveInterface`(none)wave file object`$channels``array`(none)array of channel numbers which you want to use`$wpm``float``20`speed in WPM (words per minute; see [speed](#speed))`$tone``float``700`signal tone in Hz`$volume``float``1`volume (should be in range 0..1)NOTICE: `wpm`, `tone` and `volume` can be changed after create object (see [setters](#setters)).

### Generating text messages

[](#generating-text-messages)

To generate text messages you can use `MorseEncoder::text()` method. e.g.:

```
// ...

$morse->text('CQ CQ SO9FOX');
```

On `" "` character, to file will be added moment of silence with length 10 times longer than dot. You can also use method `MorseEncoder::space()` to add this silence. e.g.:

```
// ...

$morse->space();
```

### Sending procedural characters

[](#sending-procedural-characters)

To send procedural characters you can use dedicated methods (see [procedural character table](#procedural-character-table)). e.g.:

```
// ...

$morse->attention();
```

You can also use shortcut between `` to send procedural characters (see [procedural character table](#procedural-character-table)). e.g.

```
// ...

$morse->text(' CQ CQ SO9FOX');
```

#### Procedural character table

[](#procedural-character-table)

shortcutdedicated methodmorse codesignificance```endOfMessage()`╸━╸╸━╸╸End of Message```wait()`╸━╸╸╸╸Wait (I need some time)```breakIn()`━╸╸╸╸━╸╸━╸Break in```endCopy()`╸━╸╸━╸╸End Copy - end of transmission```correction()`╸╸╸╸╸╸╸╸Correction```attention()`━╸╸━╸╸━╸Attention```goAhead()`━╸╸━╸━╸╸Go ahead```newLine()`╸━╸╸━╸Return - new line```silentKey()`╸╸╸━╸╸━╸End of contact (after call sign means deceased operator)```sos()`╸╸╸━╸━╸━╸╸╸╸SOS, Save Our Souls - distress signal```verified()`╸╸╸━╸╸Verified### Short numbers mode

[](#short-numbers-mode)

If you want to use short number signals you can set short numbers mode. e.g.:

```
// ...

$morse->setShortNumbers(true);
$morse->setShortNumbers(false);
```

NOTICE: some short number signals are same as some letter signals. You can use short number mode when you are sending lot digits e.g. phone number, but you should avoid to sending short number signals otherwise, especially during sending call signs or QTH locators. e.g.:

```
// ...

$morse
    ->text('CQ CQ SO9FOX CALL ME')
    ->space()
    ->setShortNumbers(true)
    ->text('501 234 567')
    ->setShortNumbers(false);
```

digitnormal codeshort codeshor code same as1╸━╸━╸━╸━╸╸━╸A2╸╸━╸━╸━╸╸╸━╸U3╸╸╸━╸━╸╸╸╸━╸V4╸╸╸╸━╸╸╸╸╸━╸(none)5╸╸╸╸╸╸E6━╸╸╸╸╸━╸╸╸╸╸(none)7━╸━╸╸╸╸━╸╸╸╸B8━╸━╸━╸╸╸━╸╸╸D9━╸━╸━╸━╸╸━╸╸N0━╸━╸━╸━╸━╸━╸T### Getters

[](#getters)

getterreturning typesignificance`getWpm()``float`returns transmission speed in WPM (words per minute)`getTone()``float`returns tone in Hz`isShortNumbers()``bool`returns true short numbers mode is set`getVolume()``float`returns volume### Setters

[](#setters)

setterparametr typesignificance`setWpm()``float`sets transmission speed in WPM (words per minute; see [speed](#speed))`setTone()``float`sets tone in Hz`setShortNumbers()``bool`sets or unsets short numbers mode`setVolume()``float`sets volume (should be in range 0..1)### Exceptions

[](#exceptions)

All exceptions are in namespace `\RemiTheFox\Morse\Exception` implements `\RemiTheFox\Morse\Exception\MorseExceptionInterface`.

exceptionsignificance`FileIsNotWritableException`wave file is not writable`UnknownCharacterException`unknown character`UnknownProceduralCharacterException`unknown procedural character`UnterminatedProceduralCharacterException`unterminated procedural character in text### Speed

[](#speed)

Speed in words per minute cannot be specified precisely because it depends on length of words. Wpm parameter is using to define dot, dash, and silence times.

elementtime rule15 WPM20 WPM25 WPMdot1 200ms / WPM80ms60ms48msdash3 600ms / WPM240ms180ms144mssilence inside character1 200ms / WPM80ms60ms48mssilence between characters3 600ms / WPM240ms180ms144mssilence between words12 000ms / WPM800ms600ms480mslong text? ASCII-fox:

```
 /\-/\
(=^w^=)
 )   (

```

━╸━╸╸╸╸ ╸╸╸━╸━╸

###  Health Score

21

—

LowBetter than 18% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

738d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0193368da52007e2a803d8827dd0b584ce1dd93fab2a3805cdc21db817882a6e?d=identicon)[remithefox](/maintainers/remithefox)

---

Top Contributors

[![remithefox](https://avatars.githubusercontent.com/u/46873705?v=4)](https://github.com/remithefox "remithefox (1 commits)")

### Embed Badge

![Health badge](/badges/remithefox-morse/health.svg)

```
[![Health](https://phpackages.com/badges/remithefox-morse/health.svg)](https://phpackages.com/packages/remithefox-morse)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
