calebporzio / click

The podcast recording and editing suite of your dreams. Featuring just the one button.
MIT License
18 stars 3 forks source link

Come up with format for config JSON file #5

Open DanielCoulbourne opened 4 years ago

DanielCoulbourne commented 4 years ago

Should support both segments and tracks

Segments are chunks of audio which will be concatenated in order to create the final Clip

Tracks are chunks of audio which will be layered to create a single segment

An example of a possible format is:

{
  "segments": {
    "intro": {
      "file": "introMusic.mp3"
    },
    "mainShow": {
      "tracks": {
        "daniel": {
          "file": "daniel.mp3"
        },
        "caleb": {
          "file": "caleb.mp3"
        }
      }
    },
    "outro": {
      "file": "outroMusic.mp3"
    },
  }
}
mdavis1982 commented 4 years ago

@DanielCoulbourne Maybe we should supplement the segments with the concept of Sound Boards. These are collections of pre-recorded audio that can be inserted easily into the final mix down at arbitrary points (potentially marked whilst recording in some way). These could be useful for both intro and outro music, but also for inserting adverts during the show.

What about something like this:

{
    "show": {
        "name": "No Plans To Merge",
        "segments": [
            {
                "name": "Intro",
                "use": "music.intro"
            },
            {
                "name": "Content",
                "tracks": [
                    {
                        "name": "Daniel",
                        "file": "content/daniel.mp3"
                    },
                    {
                        "name": "Caleb",
                        "file": "content/caleb.mp3"
                    }
                ],
            },
            {
                "name": "Outro",
                "use": "music.outro"
            }
        ]
    },
    "soundboards": [
        {
            "name": "Adverts",
            "ref": "adverts",
            "tracks": [
                {
                    "name": "Honeybadger",
                    "ref": "honeybadger",
                    "file": "adverts/honeybadger.mp3"
                },
                {
                    "name": "Laravel Livewire",
                    "ref": "laravel-livewire",
                    "file": "adverts/livewire.mp3"
                }
            ]
        },
        {
            "name": "Music",
            "ref": "music",
            "tracks": [
                {
                    "name": "Intro",
                    "ref": "intro",
                    "file": "music/intro.mp3"
                },
                {
                    "name": "Outro",
                    "ref": "outro",
                    "file": "music/outro.mp3"
                }
            ]
        }
    ]
}

Doing something like this would allow you to create different templates for different shows, record directly into the content directory once you've stubbed out the show structure on the filesystem, and reference pre-recorded content that is frequently used pretty easily.

What are your thoughts?

DanielCoulbourne commented 4 years ago

I really like this idea, although I don't love the name soundboards. Maybe the more generic assets?

mdavis1982 commented 4 years ago

@DanielCoulbourne That works. It's just that sound boards are an actual audio term 😄

They're also sometimes referred to as "carts" or "cue carts" (like in QLab - which is the de facto standard for live click tracks, backing music etc in theatre.

Assets works though - and is probably more understandable for people not into audio etc 😄

mdavis1982 commented 4 years ago

@DanielCoulbourne Also, now that we have different processes / operations that we can perform on stuff, maybe this should also be in the config file? Something like:

{
    "show": {
        "name": "No Plans To Merge",
        "segments": [
            {
                "name": "Intro",
                "use": "music.intro"
            },
            {
                "name": "Content",
                "tracks": [
                    {
                        "name": "Daniel",
                        "file": "content/daniel.mp3"
                    },
                    {
                        "name": "Caleb",
                        "file": "content/caleb.mp3"
                    }
                ],
                "operations": [
                    "level",
                    "mix"
                ]
            },
            {
                "name": "Outro",
                "use": "music.outro"
            }
        ],
        "operations": [
            "concatenate"
        ]
    },
    "assets": [
        {
            "name": "Adverts",
            "ref": "adverts",
            "tracks": [
                {
                    "name": "Honeybadger",
                    "ref": "honeybadger",
                    "file": "adverts/honeybadger.mp3"
                },
                {
                    "name": "Laravel Livewire",
                    "ref": "laravel-livewire",
                    "file": "adverts/livewire.mp3"
                }
            ]
        },
        {
            "name": "Music",
            "ref": "music",
            "tracks": [
                {
                    "name": "Intro",
                    "ref": "intro",
                    "file": "music/intro.mp3"
                },
                {
                    "name": "Outro",
                    "ref": "outro",
                    "file": "music/outro.mp3"
                }
            ]
        }
    ]
}

In this way, we could apply different processing to each of the segments, and then have a final operation that concatenates all the segments together.

This is more of a brain dump than anything concrete - but I thought it might be useful to just run the production script with just the config passed and everything happen automatically 😄

DanielCoulbourne commented 4 years ago

I think the operations should be an implementation detail. I think of the config file as an abstraction of the operations.

Each of the "tracks" for a given "segment" will get a level and mix treatment, then all of the segments will get concatenate ed

As for the arrays of assets, I don't think that's a good idea. I tend to think grouping assets is a bit confusing.