<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[In The Loop Blog]]></title><description><![CDATA[In the Loop | Changing the way vocal artists and music producers collaborate]]></description><link>https://blog.intheloopstudio.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1629910440425/DUddKtFRH.png</url><title>In The Loop Blog</title><link>https://blog.intheloopstudio.com</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 09:42:22 GMT</lastBuildDate><atom:link href="https://blog.intheloopstudio.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Creating an Audio Feed in Flutter (Part 2)]]></title><description><![CDATA[Table of Content

Intro
List Files from Google Drive
Streaming Audio
ListView.builder
Audio Lock
Conclusion

The final code can be found here: https://github.com/jonaylor89/AudioFeed
Intro
Prereqs
This post builds off of the code from the previous pa...]]></description><link>https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-2</link><guid isPermaLink="true">https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-2</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Mobile Development]]></category><category><![CDATA[Mobile apps]]></category><category><![CDATA[music]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Tue, 26 Oct 2021 22:19:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1635184179540/wlJ06DIuS.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="table-of-content">Table of Content</h1>
<ul>
<li>Intro</li>
<li>List Files from Google Drive</li>
<li>Streaming Audio</li>
<li>ListView.builder</li>
<li>Audio Lock</li>
<li>Conclusion</li>
</ul>
<p>The final code can be found here: <a target="_blank" href="https://github.com/jonaylor89/AudioFeed">https://github.com/jonaylor89/AudioFeed</a></p>
<h1 id="intro">Intro</h1>
<h3 id="prereqs">Prereqs</h3>
<p>This post builds off of the code from the previous part so if you want to follow along with the code, I <strong>recommend reading <a target="_blank" href="https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-1">part 1</a> first</strong>. <strong>Please also have a Google Drive folder with some MP3 files in it</strong> since I'm going to be deleting the folder and infrastructure I'm using before this is published. This tutorial is going to be pretty Google Cloud heavy so if you aren't familiar with it, I'd recommend reading some docs and familiarizing yourself beforehand, otherwise things like "service account" and "cloud function" won't make sense.</p>
<p>In the last part, we were able to pick and play mp3 files from our device's storage! In this part, we'll be building off of that to be able to locate files in a Google Drive folder and stream the audio from the folder, to our device. Kind of like a poor-man's Spotify. This sounds simple enough but there are some subtle problems that'll require things to be a little less straightforward than what we would like. A brief list of what this part will add is:</p>
<ul>
<li>List audio files in a drive folder</li>
<li>stream audio from a specific audio file in the same drive folder</li>
</ul>
<p>When connecting to Google Drive, it is <strong>extremely</strong> important that you don't store credentials on the app because anything stored on the app (e.g. passwords, service account info, OAuth keys, etc.) will get packaged and is visible to end-users. Therefore, in this tutorial, we will also be building a serverless function to proxy our requirements to the Google Drive API so we don't have to store any service account credentials on the device. Since our app isn't going onto the app store and we want to keep things simple, the serverless function is going to allow for unauthenticated requests so for any production use cases, we'd want to add some kind of Sign-In feature to restrict who can ping our API. For the actual streaming portion though, we won't need to go through a middle man since we can just make our Google Drive folder public, but again, in any production use cases, this would need to be changed (and honestly Firebase or something similar would need to be used).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1635198916721/Rcx6JAr1H.png" alt="Blank_diagram.png" /></p>
<h1 id="list-files-from-google-drive">List Files from Google Drive</h1>
<h3 id="create-google-cloud-project">Create Google Cloud Project</h3>
<p>Before we start messing with the app, we'll start by building the cloud function that'll read from our Google Drive folder. To do that we'll need a new Google Cloud Project and for this project, we'll need to enable the Google Drive API. :</p>
<pre><code class="lang-bash"><span class="hljs-built_in">export</span> PROJECT_ID=&lt;SOME-PROJECT-ID&gt;
gcloud projects create <span class="hljs-variable">$PROJECT_ID</span> --name=<span class="hljs-string">"AudioFeed"</span>
gcloud config <span class="hljs-built_in">set</span> project <span class="hljs-variable">$PROJECT_ID</span>
gcloud services <span class="hljs-built_in">enable</span> drive.googleapis.com
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1635198931495/VcvYYGB69.png" alt="LOOPS.png" /></p>
<h3 id="cloud-function-to-list-files">Cloud Function to List Files</h3>
<p>With the project made, we can now quickly create a short script to interact with Google Drive and pull the name and id for the audio files. It's important that we get <strong>both</strong> the name <strong>and</strong> id since the name (i.e. foobar.mp3) is what'll be used to display on the frontend and the id is what we'll need to stream the audio from Google Drive later on.</p>
<pre><code class="lang-bash">.
├── analysis_options.yaml
├── android
├── build
├── <span class="hljs-built_in">functions</span>
            └── ListDriveFiles
               ├── main.py
               └── requirements.txt
├── ios
├── lib
├── macos
├── pubspec.lock
├── pubspec.yaml
├── README.md
├── <span class="hljs-built_in">test</span>
└── web
</code></pre>
<pre><code class="lang-python"><span class="hljs-comment"># Import Google Libraries</span>
<span class="hljs-keyword">from</span> googleapiclient.discovery <span class="hljs-keyword">import</span> build
<span class="hljs-keyword">from</span> google.oauth2 <span class="hljs-keyword">import</span> service_account

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span>(<span class="hljs-params">request</span>):</span>

    FILETYPE = <span class="hljs-string">"audio/mpeg"</span>

        <span class="hljs-comment"># Build Google Drive APi</span>
    service = build(<span class="hljs-string">"drive"</span>, <span class="hljs-string">"v3"</span>)

    results = (
                <span class="hljs-comment"># List Files</span>
        service.files()

                <span class="hljs-comment"># Filter for just audio files and give us only the id and name</span>
        .list(fields=<span class="hljs-string">"files(id, name)"</span>, q=<span class="hljs-string">f"mimeType='<span class="hljs-subst">{FILETYPE}</span>'"</span>)
        .execute()
    )

    items = results.get(<span class="hljs-string">"files"</span>, [])

        <span class="hljs-comment"># Format the result</span>
    item_dict = map(<span class="hljs-keyword">lambda</span> x: {<span class="hljs-string">"name"</span>: x[<span class="hljs-string">"name"</span>], <span class="hljs-string">"id"</span>: x[<span class="hljs-string">"id"</span>]}, items)

        <span class="hljs-comment"># Response with JSON payload</span>
    <span class="hljs-keyword">return</span> {<span class="hljs-string">"files"</span>: list(item_dict)}
</code></pre>
<p>As you can see, the script isn't very long since nothing crazy complex is being done. The Google Drive API provides a reasonably simple interface for grabbing what we need. For more info on it, you can read the docs <a target="_blank" href="https://developers.google.com/drive/api/v3/about-sdk">here</a>. With the function written, we just need to specify our dependencies and then deploy.</p>
<pre><code class="lang-bash">google-api-python-client
google-auth-httplib2
google-auth-oauthlib
</code></pre>
<pre><code class="lang-bash">gcloud <span class="hljs-built_in">functions</span> deploy list-drive-files --entry-point main --runtime python39 --trigger-http
</code></pre>
<h3 id="share-folder-with-function">Share Folder with Function</h3>
<p>After it has deployed, we need to give the function access to the Google Drive folder. Luckily there is an easy way to do this without anything complex using IAM or whatnot. We simply need to go to the Google Drive folder and share it (exactly like we would if we were sharing it with another person) with the service account email for our cloud function which is automatically generated for us by Google.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1635208416814/O-MiioTjD.png" alt="SHARE.png" /></p>
<p>And Voila! It works!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1635198968387/CSSrOEN76.png" alt="FUNCTION.png" /></p>
<h3 id="call-cloud-function-in-the-app">Call Cloud Function in the App</h3>
<p>Finally, let's begin editing our actual application code. To begin, we first need to gut most of the <code>AudioFeedView</code> since we no longer need the <code>FloatingActionButton</code> , everything involving state, and any of the other logic for displaying audio picked from local storage. Given that we're removing everything involving state, we'll also be converting the <code>AudioFeedView</code> to a stateless widget. This is the widget where we'll be calling our cloud function in a bit so it'll make things nice and easy to strip everything unnecessary out now.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/components/audio_container.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioFeedView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  AudioFeedView({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      body: Center(
                child: Container(),
      ),
    );
  }
}
</code></pre>
<p>With that done, we're in a good spot to add the logic for calling our cloud function. Traditionally, in other fronend frameworks, we'd usually do this with some kind of state management and call out cloud function in some form of <code>initState()</code> . Of course we could do this with Flutter, however, fortunately, we can leverage Flutter's <code>FutureBuilder</code> widget which alongs us to provide it a future (i.e. our cloud function http call) and it will manage the state and keep the UI in sync with it for us.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'dart:convert'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:http/http.dart'</span> <span class="hljs-keyword">as</span> http;

<span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/components/audio_container.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioFeedView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  AudioFeedView({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> cloudFunctionUrl = <span class="hljs-string">"&lt;YOUR-FUNCTION-URL&gt;"</span>;

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      body: Center(
        child: FutureBuilder&lt;http.Response&gt;(
          future: http.<span class="hljs-keyword">get</span>(<span class="hljs-built_in">Uri</span>.parse(cloudFunctionUrl)),
          builder: (context, snapshot) {

                        <span class="hljs-comment">// Show a loading indictator while we wait</span>
            <span class="hljs-keyword">if</span> (!snapshot.hasData) {
              <span class="hljs-keyword">return</span> <span class="hljs-keyword">const</span> CircularProgressIndicator();
            }

            <span class="hljs-keyword">final</span> response = snapshot.data!;
            <span class="hljs-keyword">final</span> <span class="hljs-built_in">List</span>&lt;<span class="hljs-built_in">dynamic</span>&gt; audioFiles = jsonDecode(response.body)[<span class="hljs-string">"files"</span>];
            <span class="hljs-keyword">return</span> Container() <span class="hljs-comment">// [!!!] This is a placeholder</span>
          },
        ),
      ),
    );
  }
}
</code></pre>
<h1 id="streaming-audio">Streaming Audio</h1>
<p>Moving to the <code>AudioContainer</code> widget, how do we play remote audio files in Google Drive from our app? Well, the answer to that question has two answers.</p>
<p>The first piece, "how do we play remote audio files from our app" is solved by our old friend <code>just_audio</code> which has a method <code>setUrl()</code> that allows us to point our audio player to a URL and strea the audio to our device ✅</p>
<p>The second piece of that "how to we play remote audio files <strong>in Google Drive</strong>" is bit more tricky. It isn't very trivial to find the exact URL to access files from a public Google Drive folder. Luckily, (and I mean very luckily), there is a <a target="_blank" href="https://stackoverflow.com/questions/65530874/how-to-play-music-mp3-m4a-etc-from-google-drive-in-flutter">stackoverflow</a> post telling us that the "secret url" is <code>https://drive.google.com/uc?export=view&amp;id=&lt;FILE_ID&gt;</code> ✅</p>
<p><em>(Updating this widget is going to require a lot of little spare updates so I'll make it more clear what exactly is changing)</em></p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/components/seek_bar.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/cupertino.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:just_audio/just_audio.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:rxdart/rxdart.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioContainer</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{
  <span class="hljs-keyword">const</span> AudioContainer({
    Key? key,

      <span class="hljs-comment">// ❗ New widget parameters</span>
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioTitle,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioId,
  }) : <span class="hljs-keyword">super</span>(key: key);

    <span class="hljs-comment">// ❗ New widget parameters</span>
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> audioTitle;
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> audioId;

  <span class="hljs-meta">@override</span>
  _AudioContainerState createState() =&gt; _AudioContainerState();
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioContainerState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioContainer</span>&gt; </span>{
    <span class="hljs-comment">// ❗ New widget parameters</span>
  <span class="hljs-built_in">String</span> <span class="hljs-keyword">get</span> _audioTitle =&gt; widget.audioTitle;
  <span class="hljs-built_in">String</span> <span class="hljs-keyword">get</span> _audioId =&gt; widget.audioId;
  ValueNotifier&lt;<span class="hljs-built_in">String</span>&gt; <span class="hljs-keyword">get</span> _audioLock =&gt; widget.audioLock;

    <span class="hljs-comment">// ❗ Google Drive Audio Streaming URL</span>
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> _drivePrefix = <span class="hljs-string">"https://drive.google.com/uc?export=view&amp;id="</span>;

  <span class="hljs-keyword">final</span> AudioPlayer _player = AudioPlayer();

  <span class="hljs-keyword">void</span> initAudio() {
    _player.setLoopMode(LoopMode.one);
  }

  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> initState() {
    initAudio();
    <span class="hljs-keyword">super</span>.initState();
  }

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    _player.setUrl(_drivePrefix + _audioId); <span class="hljs-comment">// ❗ Change from _player.setFilePath(...)</span>
    <span class="hljs-keyword">return</span> Column(
      children: [
        <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">50.0</span>),
        Padding(
          padding: <span class="hljs-keyword">const</span> EdgeInsets.symmetric(horizontal: <span class="hljs-number">20</span>, vertical: <span class="hljs-number">10</span>),
          child: Text(
            _audioTitle,   <span class="hljs-comment">// ❗ Change from _audioFile.path...</span>
            style: <span class="hljs-keyword">const</span> TextStyle(
              fontSize: <span class="hljs-number">25</span>,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),

                ...
      ],
    );
  }
}
</code></pre>
<h1 id="listviewbuilder">ListView.builder</h1>
<p>In order to display our new <code>AudioContainer</code> , we need to go back to the <code>AudioFeedView</code> and add the widget for each audio file in the Google Drive folder. To do this, we'll need to take advantage of another amazing Flutter widget: <code>ListView.builder()</code> . This widget allows us to supply it some list of elements as well as a function describing how to render each element. In our case, the list we're providing is the list of audio files we got back from our cloud function, and the function we're using to render each element just returns our <code>AudioContainer</code> .</p>
<pre><code class="lang-dart">Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      body: Center(
        child: FutureBuilder&lt;http.Response&gt;(
          future: http.<span class="hljs-keyword">get</span>(<span class="hljs-built_in">Uri</span>.parse(cloudFunctionUrl)),
          builder: (context, snapshot) {
            <span class="hljs-keyword">if</span> (!snapshot.hasData) {
              <span class="hljs-keyword">return</span> <span class="hljs-keyword">const</span> CircularProgressIndicator();
            }

            <span class="hljs-keyword">final</span> response = snapshot.data!;
            <span class="hljs-keyword">final</span> <span class="hljs-built_in">List</span>&lt;<span class="hljs-built_in">dynamic</span>&gt; loops = jsonDecode(response.body)[<span class="hljs-string">"files"</span>];
            <span class="hljs-keyword">return</span> ListView.builder(
              itemCount: loops.length,
              itemBuilder: (context, index) {
                <span class="hljs-keyword">final</span> <span class="hljs-built_in">Map</span>&lt;<span class="hljs-built_in">String</span>, <span class="hljs-built_in">dynamic</span>&gt; loop = loops[index];
                <span class="hljs-keyword">return</span> AudioContainer(
                  audioTitle: loop[<span class="hljs-string">"name"</span>]! <span class="hljs-keyword">as</span> <span class="hljs-built_in">String</span>,
                  audioId: loop[<span class="hljs-string">"id"</span>]! <span class="hljs-keyword">as</span> <span class="hljs-built_in">String</span>,
                );
              },
            );
          },
        ),
      ),
    );
  }
</code></pre>
<p>And if all went well...</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1635208596106/fU9YiHOB5.jpeg" alt="Screenshot_20211018-152156.jpg" /></p>
<h1 id="audio-locking">Audio Locking</h1>
<p>One last thing though...</p>
<p>There is one minor bug with the way things are implemented right now and it's that if we tap the play button on music audio clips, it'll play them all at the same time. We need a mechanism to pause the current playing audio clip when we click on a new one. Once again though, Flutter has us covered with a type called <code>ValueNotifier</code> . This type allows us to wrap around another data type (e.g. String) and attach listeners to it that are notified when the value changes. In our case, the value we want to wrap around is the id for the audio file returned from Google Drive, and when the value changes, we want to pause/play audio appropriately. We can go ahead and add the ValueNotifier to our <code>AudioFeedView</code> and pass it to our <code>AudioContainer</code>.</p>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioFeedView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  AudioFeedView({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  ValueNotifier&lt;<span class="hljs-built_in">String</span>&gt; audioLock = ValueNotifier(<span class="hljs-string">''</span>);

  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> cloudFunctionUrl = <span class="hljs-string">"..."</span>;

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {

        ...

            <span class="hljs-keyword">return</span> AudioContainer(
        audioTitle: loop[<span class="hljs-string">"name"</span>]! <span class="hljs-keyword">as</span> <span class="hljs-built_in">String</span>,
        audioId: loop[<span class="hljs-string">"id"</span>]! <span class="hljs-keyword">as</span> <span class="hljs-built_in">String</span>,
        audioLock: audioLock,
      );

        ...

  }
}
</code></pre>
<p>In our <code>AudioContainer</code> , we'll need to add the new parameter and write a small callback saying if the <code>audioLock</code> value changes, and the value isn't our current id, then pause. That way, only one audio file is playing at a time and its id is stored in that <code>audioLock</code> .</p>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioContainer</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{
  <span class="hljs-keyword">const</span> AudioContainer({
    Key? key,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioTitle,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioId,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioLock,
  }) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> audioTitle;
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> audioId;
  <span class="hljs-keyword">final</span> ValueNotifier&lt;<span class="hljs-built_in">String</span>&gt; audioLock;

  <span class="hljs-meta">@override</span>
  _AudioContainerState createState() =&gt; _AudioContainerState();
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioContainerState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioContainer</span>&gt; </span>{
  <span class="hljs-built_in">String</span> <span class="hljs-keyword">get</span> _audioTitle =&gt; widget.audioTitle;
  <span class="hljs-built_in">String</span> <span class="hljs-keyword">get</span> _audioId =&gt; widget.audioId;
  ValueNotifier&lt;<span class="hljs-built_in">String</span>&gt; <span class="hljs-keyword">get</span> _audioLock =&gt; widget.audioLock;

  ...

  *<span class="hljs-keyword">void</span> onAu*dioLockChange() {
    <span class="hljs-keyword">if</span> (_audioLock.value != _audioId) {
      _player.pause();
    }
  }

  <span class="hljs-keyword">void</span> initAudio() {
    _audioLock.addListener(onAudioLockChange);
    _player.setLoopMode(LoopMode.one);
  }

  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> initState() {
    ...
  }

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
        ...
  }
}
</code></pre>
<p>Just to add some finishing touches, we'll also get fancy and add a Mixin called <code>AutomaticKeepAliveMixin</code> which gives us the ability to prevent the audio clips from being destroyed when they aren't rendered. Usually, you won't want to do this but because we have so few audio clips, it'll make things faster.</p>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioContainerState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioContainer</span>&gt; <span class="hljs-title">with</span> <span class="hljs-title">AutomaticKeepAliveClientMixin</span> </span>{

    ...

  <span class="hljs-meta">@override</span>
  <span class="hljs-built_in">bool</span> <span class="hljs-keyword">get</span> wantKeepAlive =&gt; <span class="hljs-keyword">true</span>;
}
</code></pre>
<h1 id="conclusion">Conclusion</h1>
<p>We're done! There's obviously tons of other stuff you could add to this (and it could probably be a whole lot pretty as well) but at this point, we have a music player app backed by Google Drive. In production situations, something more practical like s3 or Google Cloud Storage (and Firebase) should be used but for something fun to show off to people, this is kinda cool. This is also a really good demonstration of how powerful Flutter is and how simple it is nowadays to create really rich, practical applications with just one codebase. If you haven't already tried following along and writing the code yourself of clone the code from GitHub and add your own Google Drive Folder and cloud function!</p>
<p>The final code can be found here: <a target="_blank" href="https://github.com/jonaylor89/AudioFeed">https://github.com/jonaylor89/AudioFeed</a></p>
<h1 id="in-the-loop-community">In The Loop Community</h1>
<p>We hope you've learned a bit more about the lifecycle of a song. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page <a target="_blank" href="https://hashnode.com/@itl_studios">@itl_studios</a> and we can give more information there if you shoot us a direct message!</p>
<h1 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h1>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at <a target="_blank" href="http://discord.gg/c7Hf3HX6Hh">discord.gg/c7Hf3HX6Hh</a></p>
<h1 id="further-reading-and-links">Further Reading &amp; Links</h1>
<ul>
<li>Previous part: <a target="_blank" href="https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-1">https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-1</a></li>
<li>Google Cloud serverless functions: <a target="_blank" href="https://cloud.google.com/functions">https://cloud.google.com/functions</a></li>
<li>Google Drive API documentation: <a target="_blank" href="https://developers.google.com/drive/api/v3/about-sdk">https://developers.google.com/drive/api/v3/about-sdk</a></li>
<li>ValueNotifier documention: <a target="_blank" href="https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html">https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html</a></li>
<li>AutomatricKeepAliveMixin documentation: <a target="_blank" href="https://api.flutter.dev/flutter/widgets/AutomaticKeepAliveClientMixin-mixin.html">https://api.flutter.dev/flutter/widgets/AutomaticKeepAliveClientMixin-mixin.html</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[The Journey of J. Cole's Career]]></title><description><![CDATA[J. Cole?
 
Jermaine?
 
Cole?
 
Yes that one.

Fayetteville, North Carolina's Jermaine Cole, depending on who you ask, is often considered a GOAT of the industry in terms of his lyricism, production, and ability to "go platinum with no features." From...]]></description><link>https://blog.intheloopstudio.com/the-journey-of-j-coles-career</link><guid isPermaLink="true">https://blog.intheloopstudio.com/the-journey-of-j-coles-career</guid><category><![CDATA[music]]></category><category><![CDATA[Startups]]></category><category><![CDATA[production]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 20 Oct 2021 23:11:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771439024/nY1QRXON-.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4 id="j-cole">J. Cole?</h4>
<h1 id="ia"> </h1>
<h4 id="jermaine">Jermaine?</h4>
<h1 id="ia"> </h1>
<h4 id="cole">Cole?</h4>
<h1 id="ia"> </h1>
<h4 id="yes-that-one">Yes that one.</h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771156496/cEPONBn_j.png" alt="image.png" /></p>
<p>Fayetteville, North Carolina's Jermaine Cole, depending on who you ask, is often considered a GOAT of the industry in terms of his lyricism, production, and ability to "go platinum with no features." From his first mixtape in 2007, The Come Up, to his most recent album in 2021, The Off-Season, Cole has gone from a young rapper trying to make it to a peer among the greats.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771191155/8htXSzqq-.png" alt="image.png" /></p>
<h3 id="1999-2008-early-work-and-the-come-up">1999-2008: Early work and The Come Up</h3>
<p>Growing up, J. Cole wasn't really interested in pursuing a career in music as he was more focused on Basketball, his education, and supporting his family. </p>
<p>Not until the early 2000s when his mother bought him an ASR-X music sampler did he actually start to pursue a career in rapping/music production. And in 2002 when he bought the Roland TR-808 drum machine, he started to post his music on various internet forums under the monikers of Blaza and Therapist. </p>
<p>And in 2007 Cole dropped his first mixtape, The Come Up with samples from Ye West, Nas, Jay-Z, and Ghostface Killah while also starting Dreamville Records.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771280223/6Ri2S3cFS.png" alt="image.png" /></p>
<h3 id="2009-2015-roc-nation-signing-and-going-platinum">2009 - 2015: Roc Nation signing and going Platinum</h3>
<p>In 2009 when Cole released The Warm Up he had already appeared on Jay Z's The Blueprint 3 and Wale's album Attention Deficit. He also became the first artist signed by Roc Nation after previously standing out in the rain just to meet Jay Z. And in the following year he was featured in Beyond Race's 50 Great Breakthrough Artists and XXL 2010 Freshman Class a yearly publication that focuses and promotes new and rising artists.</p>
<p>In 2011, Cole began to network with other growing artists as much as possible. He toured with Drake in the UK and produced for Kendrick Lamar, while also working with Rihanna and Trey Songz in their music video for Can't Get Enough. By the end of 2011 Cole released his first studio album Cole World: The Sideline Story which became his first Platinum album practically showcasing his breakthrough into the rap scene and wish to be among the greats. And in 2012 Cole was nominated for Best New Artist at the Grammys.</p>
<p>2013 and 2014 was 2 big years for J Cole's career as he released 2 studio albums. His second album Born Sinner went double platinum off its release and carried through with his promise of solidifying himself among the greats. Cole stated that the album's intention was to "reinvigorate himself both mentally and creatively." And in 2014 Cole released one of the greatest albums, 2014 Forest Hills Drive, as it was one of the first albums to go platinum without any features. With this album Cole wished to recount his unique but relatable upbringing. He speaks about the transition from leaving North Carolina to New York to what it took in order to find his success and fame.</p>
<p>Cole's own recording company released Revenge of the Dreamers with all the artists within the record label as well in 2014. and also released Revenge of the Dreamers II in 2015</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771346930/aAFmSG0nc.png" alt="image.png" /></p>
<h3 id="2016-2020-music-with-interscope">2016-2020: Music with Interscope</h3>
<p>Exactly 2 years after 2014 Forest Hills Drive, J Cole released 4 Your Eyez Only which again went platinum with no features. In this album Cole takes inspiration from an old friend's tragic life story of selling crack to falling in love and starting a family. </p>
<p>From 2016-2018 Cole led a relatively quiet life after going on tour, but in 2018 Cole released KOD in which he gives commentary on the twisted nature of capitalism, unfaithfulness, and addiction. Rather than his usual themes of talking about his or someone else's life, Cole decided to use his platform in the rap scene to try to have an open discussion with the world. And after touring for the album, Cole became more and more active in being apart of the social scene of the NBA.</p>
<p>In 2019 Cole released the third Dreamville album Revenge of the Dreamers III, and in 2020 he collaborated with Puma to release his own shoe teasing his future album</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1634771405710/2b0-U4OzT.png" alt="image.png" /></p>
<h3 id="present-his-latest-albums-and-what-his-plan-is-for-the-future">Present: His Latest Albums and what his plan is for the future</h3>
<p>At the start of 2021, Cole released The Off-Season where he talks about the pandemic and trying to live modestly even though he is rich and famous. He also uses the album to reflect on his previous successes. Although not much is known on his plans for the future Cole has said that he plans on releasing 2 more albums before retiring from music. But this will likely be after he makes another Revenge of the Dreamers.</p>
]]></content:encoded></item><item><title><![CDATA[A Passion for Music]]></title><description><![CDATA[https://open.spotify.com/episode/2Z0PFYr7lftH8GmRYkTclN
In The Loop Podcast #4:
Thomas and Chris join David Ellis aka Ellisd to talk about his start to music, his personal process for making music, and artists who follow their passion.]]></description><link>https://blog.intheloopstudio.com/a-passion-for-music</link><guid isPermaLink="true">https://blog.intheloopstudio.com/a-passion-for-music</guid><category><![CDATA[podcast]]></category><category><![CDATA[Startups]]></category><category><![CDATA[music]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Thu, 14 Oct 2021 16:32:16 GMT</pubDate><content:encoded><![CDATA[<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://open.spotify.com/episode/2Z0PFYr7lftH8GmRYkTclN">https://open.spotify.com/episode/2Z0PFYr7lftH8GmRYkTclN</a></div>
<h4 id="in-the-loop-podcast-4">In The Loop Podcast #4:</h4>
<h5 id="thomas-and-chris-join-david-ellis-aka-ellisd-to-talk-about-his-start-to-music-his-personal-process-for-making-music-and-artists-who-follow-their-passion">Thomas and Chris join David Ellis aka Ellisd to talk about his start to music, his personal process for making music, and artists who follow their passion.</h5>
]]></content:encoded></item><item><title><![CDATA[Quantization and Sequencing]]></title><description><![CDATA[DAW Tools
We live in the best times to be producers because technology advancements has created an unlimited amount of tools and adjustments we can use/make to our projects. In this series, we go over some of the main tools that are available to all ...]]></description><link>https://blog.intheloopstudio.com/quantization-and-sequencing</link><guid isPermaLink="true">https://blog.intheloopstudio.com/quantization-and-sequencing</guid><category><![CDATA[music]]></category><category><![CDATA[logic]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 22 Sep 2021 21:26:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1632337912688/rL8p_1szV.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="daw-tools">DAW Tools</h2>
<p>We live in the best times to be producers because technology advancements has created an unlimited amount of tools and adjustments we can use/make to our projects. In this series, we go over some of the main tools that are available to all users of DAWs and deep dive into the specifics of each tool. Don't forget to stay In The Loop to keep up with the posts in this series and we hope you enjoy this week's blog post.</p>
<h2 id="what-is-quantization">What is quantization?</h2>
<p>Quantizing, quantizer, quantized. These are all forms of the term quantization. A weird word no doubt, however, this process is one of the quintessential pieces of any Digital Audio Workstation (DAW). Quantization comes up in an array of fields such as physics, signal processing, chemistry, music, etc. Since this is a blog post related to music production, we will focus on the true definition of quantization as it relates to music. Quantization in music refers to the DAW process of created exact positions for notes played previously. The notes can be transformed to precise beats  It can be a bit confusing to understand just from seeing the definition so I’ve provided a picture below to help visualize this process:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1632336370795/dozU_-fWq.png" alt="Quantiziing.PNG" /></p>
<p>https://mididrumfiles.com/2011/10/what-is-quantization/ </p>
<h2 id="music-and-math">Music and Math</h2>
<p>This is one of those many instances where two major subjects collide. Math and music have had a famous relationship dating all the way back to the ancient Greeks with the discovery of intervals. When you highlight the notes you play and quantize the notes in your DAW, it’s telling the system that you want to put notes in a specific spot in the measure. You have to take into account the beats per minute or BPM, your personal timing with the recording of your notes, as well as what note series you’re trying to quantize to. If any of these parts are messed up, then you could run into issues with using the tool.</p>
<h2 id="applications">Applications</h2>
<p>Quantization tools are used mostly for their main purpose of creating accurate note plays but one of the main applications you can see with this tool is with arpeggiators. An arpeggiator is a tool that most music software has that records and plays back music that you record but arpeggiates it, meaning the notes are played in chordal tones following each other. This image helps visualize a few of the different variations of arpeggio sequences. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1632336264220/scaZJBa5n.png" alt="Arpeggiators.png" />
https://www.musicgateway.com/ </p>
<p>As you can see, each note makes up the notes of a chord but is played in a certain order. You could have a descending pattern that would start with the highest note and descends to the root of the chord or you could have ascending which is the exact opposite. Random order arpeggiators allow you to place notes in whatever order at whatever timing you'd like. Some plug-ins even have the ability to create a random order for you.</p>
<h2 id="issues-with-quantizing">Issues with Quantizing</h2>
<p>Not all systems can be perfect and quantizing falls in the category of an “almost perfect” tool. It’s an incredible tool that works to move the notes to exactly where you want them to be but you could run into issues with the notes moving to a grid section in the measure where you didn’t want it to move. This issue almost always stems from the input of notes and the timing of the metronome. For example, if you wanted to create a series of notes that are in the quarter note triplet pattern so you input three notes and then quantize to triplet quarter notes, the system will do its best to place the notes where you want. It could end up putting one or two of the notes in a triplet pattern but outside of the sequence because the input notes were just enough off from the metronome that the quantization tool moved the note or notes outside of the sequence. </p>
<h2 id="what-is-sequencing-in-music-production">What is Sequencing in Music Production?</h2>
<p>This topic can be confusing as the definition of sequencing is arranging in a particular order which for a sequencer tool, that definition also applies. However, with sequencer tools, the particular orders can be manipulated to however you want, similar to an arpeggiator tool. Sequencers are popular in the Electronic Dance Music scene as synth sequencers can create a build-up to a drop or you could use them for a repetitive hook. </p>
<h2 id="hardware-vs-software">Hardware vs Software</h2>
<p>You’ve probably seen the midi beat pad instruments that have a series of squares which can each have a specific sound to them. Most if not all of those devices have a switch or button on them that can have that sound repeat, arpeggiate, or sequence notes in a looping fashion. An example of a beat pad that is commonly used for sequencing notes is the Akai Professional MPD218 and if you were looking to purchase this device, it has an average cost of about $120 and can be found on most music stores online.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1632336325035/CtEqZtH3e.jpeg" alt="sequencar.jpg" /></p>
<p>https://bedroomproducersblog.com/2019/05/31/sequencair-full-bucket-music/ </p>
<p>Music and audio software also can have built-in sequencers such as SequenceAir which is a free plug-in you can use for your DAW. As you can see from the picture below of the tool, it looks just like a mixing board and has tons of features that you can use to manipulate your sounds.</p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>We hope you've learned a bit more about quantizing and sequencing. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page @itl_studios and we can give more information there if you shoot us a direct message!</p>
<h2 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h2>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at https://discord.gg/82p6baCU </p>
<h2 id="helpful-links">Helpful Links</h2>
<p>https://electronicmusic.fandom.com/wiki/Sequencer </p>
<p>https://blog.andertons.co.uk/learn/how-to-use-a-sequencer-to-make-music </p>
<p>https://bedroomproducersblog.com/2019/05/31/sequencair-full-bucket-music/ </p>
<p>https://www.musicgateway.com/ </p>
]]></content:encoded></item><item><title><![CDATA[Complete Beginner's Guide to Music Theory]]></title><description><![CDATA[So You're Interested in Learning Music Theory?
Whether you're getting into music production, playing an instrument, or writing songs, music theory is a crucial skill to add to your toolset. A lot of the time, people view music theory as a scary, mono...]]></description><link>https://blog.intheloopstudio.com/complete-beginners-guide-to-music-theory</link><guid isPermaLink="true">https://blog.intheloopstudio.com/complete-beginners-guide-to-music-theory</guid><category><![CDATA[music]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 15 Sep 2021 18:34:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1631722061007/unZTsbEEZ.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="so-youre-interested-in-learning-music-theory">So You're Interested in Learning Music Theory?</h1>
<p>Whether you're getting into music production, playing an instrument, or writing songs, music theory is a crucial skill to add to your toolset. A lot of the time, people view music theory as a scary, monolithic topic that requires years of musical experience to understand. Although music theory may seem this way to beginners, it is a myth that learning it requires such expertise. In this article, I will breakdown the major concepts that you will need to know, having <strong>zero</strong> music background. These topics are:</p>
<ul>
<li>Musical Notes</li>
<li>Rhythm</li>
<li>Finding notes on a Piano</li>
<li>Pitch Intervals</li>
<li>Chords</li>
<li>Chord Progressions</li>
</ul>
<p>As a producer, or someone creating music primarily with a DAW, there are a few <strong>key takeaways</strong> here. You will be able to:</p>
<ul>
<li>Play and read chords</li>
<li>Develop an idea of chord progressions</li>
<li>Understand notes on a keyboard/piano</li>
<li>Understand how rhythm is notated</li>
</ul>
<p>To make things easier, I've divided this into a series of 3 articles, with each one focusing on a particular area within music theory. After these articles, you should have enough knowledge to get up and running with making music!</p>
<p>Note: This article covers a lot about sheet music. Although you may not actually write out music, or read it a lot, sheet music and music theory are incredibly <strong>interrelated</strong>. Sheet music allows us to write out, visualize, and analyze the concepts of music theory. So if you find yourself uninterested in learning how to read sheet music, try to stick with it, as it will pay off long-term.</p>
<h2 id="musical-notes">Musical Notes</h2>
<p><em>Everything</em> in music starts with <strong>notes</strong>.</p>
<p>In any human language, we name the letters of the alphabet. Similarly, we have an 'alphabet' of notes, so to speak, in music. These notes are A, B, C, D, E, F, G. Pretty basic right? Each one of these notes, or pitches, represents a frequency. Notes are commonly represented through sheet music, which is how most musicians read and interpret music. Musical notes are the <strong>fundamental building blocks</strong> of music theory. With these <strong>notes</strong>, we can craft melodies, chords, and songs. Here is how we notate these notes:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631285562109/ktFeyEnhl.png" alt="treble_clef.png" />
Going from left to right, we see the notes C, D, E, F, G, A, B, and then C again! These notes are assigned exact positions on the <strong>Staff</strong>, which are the 5 horizontal lines that span across the page. Additionally, the squiggly thing on the far left is the symbol for <strong>Treble Clef</strong>, which indicates how to read the notes. This is the most common Clef, and all you'll need to know for now. If you're wondering about the little numbers next to the note names, we'll get to that soon. </p>
<p><strong>Useful Link</strong></p>
<ul>
<li><a target="_blank" href="https://www.musictheory.net/lessons/10">How to Read Notes</a> </li>
</ul>
<p>We can use this image as a <em>guide</em> to understand how to read notes. If a note is on the lowest line, it is an E, if it is on the second lowest line, it is a G. Easy! Now you can read notes. To look at this in context, let's visualize this on a Piano.</p>
<h2 id="the-piano">The Piano</h2>
<p>Understanding the piano gives way to visualizing music theory. Instead of these invisible, abstract concepts, we can actually play them, and essentially see them. Here's a diagram of the notes on a Piano:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631719313936/zlzpAMAx9.jpeg" alt="piano.jpeg" />
<em>For reference: Notes get higher in pitch as you move right on a piano. Far left is really LOW, and far right is really HIGH.</em></p>
<p>Notice how we still see the same notes C, D, E, F, G, A, B, C? There are also new notes now, with odd symbols. These notes are achieved by moving one <strong>half step</strong>, or <strong>key on the piano</strong> away from a <em>natural note</em>, or <em>white key</em>. If we play a G on the piano, and move down one half step, or key, we are now playing an F# (F Sharp) or Gb (G Flat). These two notes, sound the same, but have different names. The general rule is that if you arrive at the note from above (meaning you are descending), then you could say <strong>flat</strong>, or if you are ascending, you could say <strong>sharp</strong>. This isn't a concrete rule, it simply helps to show that the names are interchangeable.</p>
<p><strong>Useful Link</strong></p>
<ul>
<li><a target="_blank" href="https://www.musictheory.net/lessons/20">Steps and Accidentals Lesson</a> </li>
</ul>
<p>Instead of trying to memorize all 52 keys on a piano, all you need to know are these <strong>12 notes</strong> in the picture above. Moving left to right, the notes ALL repeat themselves eventually, and many times. Notes can be played in different <strong>octaves</strong>. So you can play a low-sounding C, or one all the way on the right of the piano, which would sound very high.</p>
<p>If we were to play <strong>only the white keys</strong>, starting at C, and going to the next C, and <strong>octave above</strong>, we would be playing the <strong>C Major Scale</strong>. Scales are a <strong>fundamental</strong> concept in music theory. A <strong>scale</strong> is a set of musical notes, ordered by their pitch. It is essentially a pattern that allows you to construct the same <em>pattern</em> from ANY note on the piano. </p>
<h2 id="scales">Scales</h2>
<p>Before we can fully understand chords, chord progressions, and melodies, we <strong>must</strong> understand scales. To construct a scale, we move in steps. If you refer back to the piano above, moving <strong>one key</strong> in any direction on a piano is called a <strong>half step</strong>, and moving <strong>two keys</strong> in any direction is called a <strong>whole step</strong>. With this in mind, let's look at the formula to build a <em>C Major Scale</em>, then look how we can use that further.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631720609993/8e4EO3HMcZ.png" alt="formula.png" />
Although we easily learn a C Major Scale by playing only the white keys from C to C on a piano, we can take note of the formula of steps to take, and apply that to ANY other note to make any major scale. So if we start on C, we then move a <em>whole step</em>, and arrive at D. Following this, we move another <em>whole step</em>, and arrive at E. Next, we move a <em>half step</em>, and arrive at E. If we continue this, whole/half step formula, we have C Major Scale.</p>
<p><strong>Why is this useful?</strong> Let's say you're making a song, and you find a cool sample in C Major. If you want to make a melody over it, you could make something that sounded great, by only using the notes in the C Major Scale. This system starts to give you an idea of how things all fit together in a song. </p>
<p><strong>Exercise</strong>: Find F on a piano ( <a target="_blank" href="https://virtualpiano.net/">Free one online</a> ), and build a major scale starting from it. This is called the F Major Scale. Use the pictures in this article to help you find the note, then use the whole/half step formula to get each note.</p>
<p>In the image below, we can also see this <em>formula</em> represented using sheet music. We can always take sheet music, and visualize it as notes on the piano like we did above. This is a very useful skill, and helps a lot for beginners learning to read notes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631720511163/ArfqLjCaW.png" alt="c_major.png" /></p>
<p>There are many different types of scales. The most popular are the <strong>Major</strong> and <strong>Minor</strong> scales. Each of these have similar scales that are built off of them, often times with LESS notes! One of the most popular examples is the Major Pentatonic Scale, or the Minor Pentatonic Scale. </p>
<p><strong>Useful Links</strong></p>
<ul>
<li><a target="_blank" href="https://www.musictheory.net/lessons/21">Major Scale Lesson</a> </li>
<li><a target="_blank" href="https://www.musictheory.net/lessons/22">Minor Scale Lesson</a> </li>
<li><a target="_blank" href="https://hellomusictheory.com/learn/pentatonic-scale/#:~:text=The%20major%20pentatonic%20scale%20is,%2C%20E%2C%20G%20and%20A.&amp;text=These%20are%20the%20two%20notes,other%20notes%20in%20the%20scale.">Pentatonic Scales</a> </li>
</ul>
<p>Now that we can find and create scales, let's see how they fit into the big picture of a song.</p>
<h2 id="key-signatures">Key Signatures</h2>
<p>Comparing music to the English language, we could say that notes are like letters. Furthermore, a grouping of letters like consonants or vowels, is similar to what a <strong>Key Signature</strong> is. A scale, like C Major, is actually just the product of playing <strong>every note</strong> in a Key signature, in order. </p>
<p><strong>Why does this matter?</strong> Let's say you're singing or playing with someone, or in a session, and they tell you the song is in D Major. With this information, you can figure out all of the right notes to play, by knowing the notes that are in the D Major scale. It is <strong>much more common</strong> for someone to give/tell you a <em>key signature, rather than a scale</em>, when collaborating. </p>
<p>So a key signature is the grouping of notes, like how we identify groupings of letters as consonants, or vowels. And a scale, is when you play through each and every one of those notes. Like if you were to say 'A, E, I, O, U' when reciting vowels.</p>
<p>Let's see what a key signature looks like, and how to interpret it.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631722280712/2jhJl5WB0.png" alt="keys2.png" />
<em>For now, only pay attention to the 'major' key signatures</em></p>
<p>Although this diagram can look a little scary, it's really not bad at all. Let's find <strong>C Major</strong> first. It's right in the center! Notice the difference between each one of the different key signatures? Those little symbols, whether they're <strong>sharps or flats</strong>, indicate the unique set of notes that create a key signature. This is essentially a visual short-hand, for telling you what notes to play if you are in a given key.</p>
<p>For example, if we built an F Major scale using the formula from above, we would get the notes [F, G, A, Bb, C, D, E, and F]. Notice how in the key signature for F Major there is <strong>one flat</strong>? Similarly, if we built a G Major scale using the same formula, we would get the notes [G, A, B, C, D, E, F#, and G]. Now notice how the key signature of G Major has <strong>one sharp</strong>? </p>
<p><strong>Useful Links</strong></p>
<ul>
<li><a target="_blank" href="https://www.musictheory.net/lessons/24">Key Signatures Lesson</a> </li>
<li><a target="_blank" href="https://www.musictheory.net/lessons/25">Key Signature Calculation</a> </li>
</ul>
<p>With this knowledge, we can start to craft melodies, bass lines, and more! In the next lesson, we'll dive more into Key Signatures, and get into Chords. </p>
<h1 id="in-the-loop-community">In The Loop Community</h1>
<p>We hope you've learned a bit more about music theory. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page <a target="_blank" href="https://hashnode.com/@itl_studios">@itl_studios</a> and we can give more information there if you shoot us a direct message!</p>
<h1 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h1>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at <a target="_blank" href="http://discord.gg/c7Hf3HX6Hh">discord.gg/c7Hf3HX6Hh</a></p>
]]></content:encoded></item><item><title><![CDATA[How DONDA’s timeline showcased the music production process]]></title><description><![CDATA[DONDA, Kanye West’s tenth studio album, was released at the end of August 2021. And while it has received mixed reviews from critics and fans, its cultural significance has been marked in the current era of music.
https://twitter.com/JesusPozos17/sta...]]></description><link>https://blog.intheloopstudio.com/how-dondas-timeline-showcased-the-music-production-process</link><guid isPermaLink="true">https://blog.intheloopstudio.com/how-dondas-timeline-showcased-the-music-production-process</guid><category><![CDATA[music]]></category><category><![CDATA[production]]></category><category><![CDATA[social media]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 08 Sep 2021 17:52:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1631061003183/FMVLhz_3E.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>DONDA, Kanye West’s tenth studio album, was released at the end of August 2021. And while it has received mixed reviews from critics and fans, its cultural significance has been marked in the current era of music.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/JesusPozos17/status/1432576362204721157?s=20">https://twitter.com/JesusPozos17/status/1432576362204721157?s=20</a></div>
<p>Apart from the actual content of the album, the release experience has given insight into the creative process of music production to the general public. Initially following the JESUS IS KING album, DONDA was announced as early as May 2020 with a July 2020 release date. But seen from the timeline of the album from the first rumor to its actual release the general public had intimate knowledge of its creation.</p>
<p>Timeline of DONDA:</p>
<ul>
<li>May 24th, 2020: The first rumors of Kanye releasing an album came out from a report about “God’s Country”</li>
<li>June 30th, 2020: Kanye releases “Wash Us in the Blood”</li>
<li>July 12th, 2020: Kanye previews “DONDA” on Twitter with a deleted tweet</li>
<li>July 19th, 2020: Kanye debuts “DONDA” tracklist with a deleted tweet</li>
<li>July 21st, 2020: Kanye releases a screenshot of the Apple Music tracklist stating DONDA would be releasing that Friday</li>
<li>July 26th, 2020: Kanye reveals the Album art of “DONDA”</li>
<li>September 26th, 2020: Kanye previews “Believe What I Say”</li>
<li>October 16th, 2020: Kanye releases his presidential campaign’s theme song “NAH NAH NAH”</li>
<li>March 7th, 2021: Rumors of Kanye working on “DONDA” after divorce with Kim Kardashian</li>
<li>July 17th,2021: Tyler the Creator was spotted in the same studio as Kanye</li>
<li>July 19th, 2021: Kanye previews DONDA for Justin LaBoy and Kevin Durant</li>
<li>July 19th, 2021: Pusha T announces Atlanta Listening Party on July 22nd</li>
<li>July 20th, 2021: Beats showcases ad during NBA finals with July 23rd release date</li>
<li>July 22nd, 2021: First Listening Party</li>
<li>July 24th, 2021: Justin LaBoy tweets August 6th release date</li>
<li>July 26th, 2021: Kanye moves into Atlanta’s Mercedes-Benz Stadium to finish “DONDA”</li>
<li>July 30th, 2021: Abou Thiam, Kanye’s manager, confirmed second listening party scheduled for August 5th </li>
<li>August 3rd, 2021: Kanye and Mike Dean tease The Weekend feature</li>
<li>August 5th, 2021: Beats tease Dr. Dre produced song from “DONDA”</li>
<li>August 5th, 2021: Second Listening Party</li>
<li>August 7th, 2021: Apple Music “DONDA” page delays release date to August 15th</li>
<li>August 9th, 2021: Kanye moves to Chicago’s Soldier Field Stadium</li>
<li>August 15th, 2021: Mike Dean says he is still on the album and Kanye is still working on it</li>
<li>August 18th, 2021: Third Listening Party announced for August 26th </li>
<li>August 19th, 2021: Abou Thiam confirms “DONDA” is dropping after Chicago event</li>
<li>August 21st, 2021: Kanye clears his Instagram feed and posts picture of Childhood home</li>
<li>August 21st, 2021: Kanye shares screenshots of convo threatening Drake</li>
<li>August 23rd, 2021: Kanye’s Childhood home is being built in Chicago Stadium</li>
<li>August 24th, 2021: Kanye changes his name to Ye removing the last name given by his mother</li>
<li>August 26th, 2021: Third Listening Party</li>
<li>August 28th, 2021: DONDA is released</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631061079296/9tt8cVD_l.jpeg" alt="KW DONDA LISTENING EVENT_GUNNER STAHL 5.jpeg" /></p>
<h2 id="step-1-writing-the-song">Step 1: Writing the Song</h2>
<p>The first step, highlighted in the <a target="_blank" href="https://blog.intheloopstudio.com/lifecycle-of-a-song">lifecycle of a song article</a>, is writing the songs of the album. From initial rumors the general public was able to experience how long it actually takes for an artist to actually create a song/album. As early as June 30th, 2020, a whole year before the actual release of the album, Kanye was working on the album likely writing new parts at any chance and also rewriting/scrapping songs. Looking at the tracklists released in July and October in 2020, they are completely different from one another and the final release.</p>
<h2 id="step-2-recording-and-demoing">Step 2: Recording and demoing</h2>
<p>In this next step, artists will often record demos for other artists and friends and family to gain insight. Doing this can give yourself constructive criticism and help elevate your production. Kanye initially showcased the album to his peers within the music industry, while also just some of his friends such as Kevin Durant and Justin LaBoy. But now, imagine showcasing a work-in-progress album/sing with the entire world watching. This is exactly what Kanye did with every listening party. By previewing the album to the world through the different live streams he was able to gain criticism and insights from the general public while also successfully marketing and building hype for the album.</p>
<h2 id="step-3-rehearsals-and-feature-additions">Step 3: Rehearsals and feature additions</h2>
<p>Playing your music after you have recorded initial snippets in different spaces and different equipment can help change the direction an album/song goes. This is because hearing your music from a different perspective from what you are used to can make arrangement of the song change to help make the song more interesting. Also adding in features from other artists and producers can bring in a missing element you didn’t know was there initially. Looking at the listening events for DONDA individually, it is very obvious that the album is different at every date from Kanye using the criticism of the public, the rehearsal within the stadiums, and the addition of features. </p>
<h2 id="step-4-fine-tuning-and-mixingmastery">Step 4: Fine Tuning and Mixing/Mastery</h2>
<p>Rome wasn’t built in a day and neither are albums. Looking at any timeline of an album, it can take years for an album to fully see the light of day. Constant tweaks are made and expected when it comes to finalizing a song/album. And even after finishing the main production mixing and mastering, highlighted in in the <a target="_blank" href="https://blog.intheloopstudio.com/lifecycle-of-a-song">lifecycle of a song article</a>, is needed to create a sense of balance.  Watching the different livestreams of Kanye in his residence in the Atlanta stadium, the general public were album to watch him whenever he would go to his computer to make any edits and mix and master his work.</p>
<p>While the DONDA release was a long and hectic journey, it laid its mark on the music industry as it showcased the production process and likely inspired many. Will other artists use Kanye's album delivery as the new framework for working on albums, or will the creative process never be this publicized again? </p>
<p>Only time will tell.</p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, join out discord or message us directly on our instagram <a target="_blank" href="https://www.instagram.com/itl_studios/">@itl_studios</a>!</p>
<h2 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h2>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at discord.gg/c7Hf3HX6Hh
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1631060714080/oQkqWWBLO.png" alt="Screen Shot 2021-08-20 at 5.04.55 PM.png" /></p>
]]></content:encoded></item><item><title><![CDATA[The Power of Data in Music]]></title><description><![CDATA[https://youtu.be/x3ZspquOdsw
In The Loop Podcast #3:
Sohail and Thomas join Shashank Chaudhary, Data Analyst at Chartmetric and talk about how data can help an artist grow, leveraging “trigger cities,” and the inclusivity of music across gender and s...]]></description><link>https://blog.intheloopstudio.com/the-power-of-data-in-music</link><guid isPermaLink="true">https://blog.intheloopstudio.com/the-power-of-data-in-music</guid><category><![CDATA[podcast]]></category><category><![CDATA[Data Science]]></category><category><![CDATA[music]]></category><category><![CDATA[data]]></category><category><![CDATA[Databases]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 01 Sep 2021 20:39:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1630528530997/NhS-OZmPb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/x3ZspquOdsw">https://youtu.be/x3ZspquOdsw</a></div>
<h4 id="in-the-loop-podcast-3">In The Loop Podcast #3:</h4>
<h5 id="sohail-and-thomas-join-shashank-chaudhary-data-analyst-at-chartmetric-and-talk-about-how-data-can-help-an-artist-grow-leveraging-trigger-cities-and-the-inclusivity-of-music-across-gender-and-sexuality">Sohail and Thomas join Shashank Chaudhary, Data Analyst at Chartmetric and talk about how data can help an artist grow, leveraging “trigger cities,” and the inclusivity of music across gender and sexuality.</h5>
]]></content:encoded></item><item><title><![CDATA[Creating an Audio Feed in Flutter (Part 1)]]></title><description><![CDATA[Table of Contents

Intro
Project Setup
Upload Audio Files from Local Storage
Audio Player Component
Conclusion

Intro
Flutter is an incredible tool for creating beautiful, natively compiled applications for mobile, web, desktop, and embedded devices ...]]></description><link>https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-1</link><guid isPermaLink="true">https://blog.intheloopstudio.com/creating-an-audio-feed-in-flutter-part-1</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Dart]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[app development]]></category><category><![CDATA[Mobile Development]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 25 Aug 2021 16:43:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1629909698064/JIIUU8u1q.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="table-of-contents">Table of Contents</h1>
<ul>
<li>Intro</li>
<li>Project Setup</li>
<li>Upload Audio Files from Local Storage</li>
<li>Audio Player Component</li>
<li>Conclusion</li>
</ul>
<h1 id="intro">Intro</h1>
<p><a target="_blank" href="https://flutter.dev/">Flutter</a> is an incredible tool for creating beautiful, natively compiled applications for mobile, web, desktop, and embedded devices from a single codebase. It is Google's (relatively) new UI toolkit for building everything Google nowadays from Google Home's to <a target="_blank" href="https://fuchsia.dev/">Fuchsia</a>. A lot of <a target="_blank" href="https://flutter.dev/showcase">big players in the tech world</a> have adopted Flutter for their cross-platform needs and for good reason, along with simplifying cross-platform development, Flutter has an incredibly rich library ecosystem showcased on their package management site <a target="_blank" href="https://pub.dev">pub.dev</a>. </p>
<p>At <strong>In The Loop</strong>, Flutter is a powerful tool to help us achieve our mission or creating a collaborative space for creators to showcase and store their music and short audio creations. We use Flutter, and its programming language of choice, Dart, as much as we can to simplify our development process, ship our app to users as soon as we can, and reach the largest possible audience. </p>
<p>Putting this to the test, in this tutorial, we're going to create an audio feed, similar to those featured in Spotify or Soundcloud, using Flutter. This is going to be a two part tutorial with part one being the creation of the audio player for a single audio file and part two being the process of pulling several audio files from Google Drive and displaying them in a list</p>
<p>The full project source code can be found at <a target="_blank" href="https://github.com/jonaylor89/AudioFeed">https://github.com/jonaylor89/AudioFeed</a></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/L3Xht9xgVbU">https://youtu.be/L3Xht9xgVbU</a></div>
<h1 id="project-setup">Project setup</h1>
<p>First things first, to get started we need to create a new Flutter project. Flutter, like most modern compilers and application toolkits, has a clean cli which, importantly, allows you to create a new project. Below I've included the command to create a new Flutter project along with a screenshot of <code>flutter --version</code> run on my machine to show you the version of Flutter being used to create the project.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1629740126839/Tjq2Oq_Pd.png" alt="Bildschirmfoto_2021-08-12_um_1.29.53_PM.png" /></p>
<pre><code class="lang-bash">flutter create audio_feed
</code></pre>
<p>Once the Flutter boilerplate code is all created, the directory structure should look something like this:</p>
<pre><code class="lang-bash">.
├── README.md
├── analysis_options.yaml
├── android/
├── audio_feed.iml
├── build/
├── ios/
├── lib
│   ├── generated_plugin_registrant.dart
│   └── main.dart
├── macos/
├── pubspec.lock
├── pubspec.yaml
├── <span class="hljs-built_in">test</span>/
└── web/
</code></pre>
<p>The only other thing to do for setting up this project is to get the home screen into its own file outside of <code>main.dart</code> which'll clean everything up. The template already has a <code>HomeView</code> Stateful widget so that just needs to be moved into its own file (which I optionally renamed <code>audio_feed_view.dart</code>):</p>
<pre><code class="lang-bash">.
├── audio_feed_view.dart
└── main.dart
</code></pre>
<p>This leaves <code>main.dart</code> looking like so:</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/audio_feed_view.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-keyword">void</span> main() {
  runApp(<span class="hljs-keyword">const</span> MyApp());
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyApp</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  <span class="hljs-keyword">const</span> MyApp({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> MaterialApp(
      debugShowCheckedModeBanner: <span class="hljs-keyword">false</span>,
      title: <span class="hljs-string">'Flutter Demo'</span>,
      theme: ThemeData(
        primarySwatch: Colors.deepPurple,
      ),
      home: <span class="hljs-keyword">const</span> AudioFeedView(),
    );
  }
}
</code></pre>
<p>And the new <code>AudioFeedView</code> :</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioFeedView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{
  <span class="hljs-keyword">const</span> AudioFeedView({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-meta">@override</span>
  _AudioFeedViewState createState() =&gt; _AudioFeedViewState();
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioFeedViewState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioFeedView</span>&gt; </span>{

<span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      body: Container(),
    );
  }
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1629740158154/pGODsEAt8.jpeg" alt="Screenshot_20210822-233455.jpg" /></p>
<h1 id="upload-audio-files-from-local-storage">Upload Audio Files from Local Storage</h1>
<p>The next step to creating a simple audio controller is to get access to some audio files. For this task, we'll recruit the help of a library called <a target="_blank" href="https://pub.dev/packages/file_picker">file_picker</a> by <a target="_blank" href="https://miguelruivo.com/">Miguel Ruivo</a>. In short, this library will allow us to request access to a users files, filter files by file extension, and load the file into our Flutter project.</p>
<pre><code class="lang-dart">flutter pub add file_picker
</code></pre>
<p>To make things simple, we're just going to add a simple <a target="_blank" href="https://material.io/components/buttons-floating-action-button">floating action button</a> that'll use <code>file_picker</code>  to load an audio file into our project that we can control later on. The first step in doing this is to create a new Flutter widget where we can put the code for our button. I've gone ahead and also created a <code>components</code> folder to put any other component widgets we create. </p>
<pre><code class="lang-dart">lib/
├── audio_feed_view.dart
├── components/
│   └── file_picker_button.dart
├── generated_plugin_registrant.dart
└── main.dart
</code></pre>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FilePickerButton</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  <span class="hljs-keyword">const</span> FilePickerButton({Key? key}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Container();
  }
}
</code></pre>
<p>You'll probably notice that I made this widget a Stateless widget and that's just because I want to avoid any fancy state management in this tutorial because there are other tutorials for that. For anything state related, <code>AudioFeedView</code> will pass in the necessary functions and variables (<em>foreshadowing</em>). </p>
<p>The code to create the button is fairly straightforward. The button is a <code>Container</code> with some <code>decoration</code> and an <code>Icon</code> in the middle. To give the button some action, the <code>Container</code> gets surrounded by a <code>GestureDetector</code> that'll listen to <code>onTap</code> events and call a function that passing in via parameters to the widget. </p>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FilePickerButton</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  <span class="hljs-keyword">const</span> FilePickerButton({Key? key, <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.onTap}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-keyword">final</span> <span class="hljs-keyword">void</span> <span class="hljs-built_in">Function</span>()? onTap;

<span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Padding(
      padding: <span class="hljs-keyword">const</span> EdgeInsets.all(<span class="hljs-number">20.0</span>),
      child: GestureDetector(
        onTap: _onTap,
        child: Container(
          height: <span class="hljs-number">60</span>,
          width: <span class="hljs-number">60</span>,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(<span class="hljs-number">10</span>),
            color: Colors.white,
            border: Border.all(
              color: Colors.deepPurple,
              width: <span class="hljs-number">2</span>,
            ),
          ),
          child: <span class="hljs-keyword">const</span> Icon(
            Icons.music_note,
            size: <span class="hljs-number">40</span>,
            color: Colors.deepPurple,
          ),
        ),
      ),
    );
  }
}
</code></pre>
<p>To make the button a floating action button, it needs to be imported to the <code>AudioFeedView</code> and passed in to the <code>Scaffold</code> as a <code>floatingActionButton</code> . </p>
<pre><code class="lang-dart"><span class="hljs-meta">@override</span>
Widget build(BuildContext context) {
  <span class="hljs-keyword">return</span> Scaffold(
    appBar: AppBar(
      title: <span class="hljs-keyword">const</span> Center(
        child: Text(<span class="hljs-string">'Audio Feed'</span>),
      ),
    ),
    floatingActionButton: FilePickerButton(
      onTap: handleAudioFromFiles, <span class="hljs-comment">//handleAudioFromFiles() defined next</span>
    ),
    body: Container(),
  );
}
</code></pre>
<p>Finally, using the <code>file_picker</code> library, the <code>handleAudioFromFiles()</code> function is defined along with a variable, <code>_pickedAudio</code> which will store the audio file that's loaded from our files. </p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/components/file_picker_button.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:file_picker/file_picker.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioFeedView</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{ ... }

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioFeedViewState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioFeedView</span>&gt; </span>{

File? _pickedAudio;

<span class="hljs-keyword">void</span> handleAudioFromFiles() <span class="hljs-keyword">async</span> {
    <span class="hljs-keyword">try</span> {
            <span class="hljs-comment">// Choose files from storage</span>
      FilePickerResult? audioFileResult = <span class="hljs-keyword">await</span> FilePicker.platform.pickFiles(
        type: FileType.custom,
        allowedExtensions: [<span class="hljs-string">'mp3'</span>],  <span class="hljs-comment">// Only show mp3 files</span>
      );

      <span class="hljs-keyword">if</span> (audioFileResult != <span class="hljs-keyword">null</span>) {
        <span class="hljs-keyword">final</span> <span class="hljs-built_in">String</span> path = audioFileResult.files.single.path!;

        File pickedAudio = File(path);

                <span class="hljs-comment">// rebuild the widget with the new pickedAudio defined and initialized</span>
        setState(() {
          _pickedAudio = pickedAudio;
        });
      }
    } <span class="hljs-keyword">catch</span> (error) {
      <span class="hljs-built_in">print</span>(error);
    }
  }

<span class="hljs-meta">@override</span>
  Widget build(BuildContext context) { ... }
}
</code></pre>
<p>Just to make sure everything works so far, let's display the filename on the <code>AudioFeedView</code> Widget.</p>
<pre><code class="lang-dart"><span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      floatingActionButton: FilePickerButton(
        onTap: handleAudioFromFiles,
      ),
      body: Center(
        child: Column(
          children: [
            _pickedAudio == <span class="hljs-keyword">null</span>
                ? <span class="hljs-keyword">const</span> SizedBox.shrink()
                : Text(
                        _audioFile.path.split(<span class="hljs-string">'/'</span>).last,
                        style: <span class="hljs-keyword">const</span> TextStyle(
                              fontSize: <span class="hljs-number">25</span>,
                              fontWeight: FontWeight.bold,
                        )
          ],
        ),
      ),
    );
  }
</code></pre>
<h1 id="audio-player-component">Audio Player Component</h1>
<p>Moving on to building the audio player, for this example, I chose to use the excellent library <a target="_blank" href="https://pub.dev/packages/just_audio">just_audio</a> by <a target="_blank" href="https://www.ryanheise.com/">Ryan Heise</a>. Not only does the library do everything needed to get a functional audio player working, it also has a great example project and intuitive interface. </p>
<pre><code class="lang-dart">flutter pub add just_audio
</code></pre>
<p>After installing the library, the next step is to create the widget to store all the UI and logic for controlling the audio. This widget will need to get the selected audio file as an input. </p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'dart:io'</span>;

<span class="hljs-keyword">import</span> <span class="hljs-string">'package:audio_feed/components/seek_bar.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/cupertino.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:just_audio/just_audio.dart'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'package:rxdart/rxdart.dart'</span>;

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AudioContainer</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{
  <span class="hljs-keyword">const</span> AudioContainer({Key? key, <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.audioFile}) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-keyword">final</span> File audioFile;

  <span class="hljs-meta">@override</span>
  _AudioContainerState createState() =&gt; _AudioContainerState();
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_AudioContainerState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">AudioContainer</span>&gt; </span>{
  File <span class="hljs-keyword">get</span> _audioFile =&gt; widget.audioFile;
  <span class="hljs-keyword">final</span> AudioPlayer _player = AudioPlayer();

    <span class="hljs-meta">@override</span>
    Widget build(BuildContext context) {
        _player.setFilePath(_audioFile.path);
      <span class="hljs-keyword">return</span> Column(
      children: [
        <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">50.0</span>),
        Padding(
          padding: <span class="hljs-keyword">const</span> EdgeInsets.symmetric(horizontal: <span class="hljs-number">20</span>, vertical: <span class="hljs-number">10</span>),
          child: Text(
            _audioFile.path.split(<span class="hljs-string">'/'</span>).last,
            style: <span class="hljs-keyword">const</span> TextStyle(
              fontSize: <span class="hljs-number">25</span>,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
            ],
        );
    }
}
</code></pre>
<p>And remember to add the <code>AudioContainer</code> to the <code>AudioFeedView</code> for it to be displayed.</p>
<pre><code class="lang-dart"><span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Scaffold(
      appBar: AppBar(
        title: <span class="hljs-keyword">const</span> Center(
          child: Text(<span class="hljs-string">'Audio Feed'</span>),
        ),
      ),
      floatingActionButton: FilePickerButton(
        onTap: handleAudioFromFiles,
      ),
      body: Center(
        child: Column(
          children: [
            _pickedAudio == <span class="hljs-keyword">null</span>
                ? <span class="hljs-keyword">const</span> SizedBox.shrink()
                : AudioContainer(
                    audioFile: _pickedAudio!,
                  ),
          ],
        ),
      ),
    );
  }
</code></pre>
<p>Before getting into the nitty-gritty, let's quickly add some extra Columns, Rows, and Padding to elements to format everything a little better.</p>
<pre><code class="lang-dart"><span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    _player.setFilePath(_audioFile.path);
    <span class="hljs-keyword">return</span> Column(
      children: [
        <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">50.0</span>),
        Padding(
          padding: <span class="hljs-keyword">const</span> EdgeInsets.symmetric(horizontal: <span class="hljs-number">20</span>, vertical: <span class="hljs-number">10</span>),
          child: Text(
            _audioFile.path.split(<span class="hljs-string">'/'</span>).last,
            style: <span class="hljs-keyword">const</span> TextStyle(
              fontSize: <span class="hljs-number">25</span>,
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
        <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">15.0</span>),
        Container(
          padding: <span class="hljs-keyword">const</span> EdgeInsets.symmetric(horizontal: <span class="hljs-number">20</span>, vertical: <span class="hljs-number">10</span>),
          decoration: <span class="hljs-keyword">const</span> BoxDecoration(
            color: Colors.white, <span class="hljs-comment">//background color of box</span>
          ),
          child: Column(
            children: [
              Row(
                children: [
                    <span class="hljs-comment">// Play/Pause Button Widget</span>
                    <span class="hljs-keyword">const</span> SizedBox(width: <span class="hljs-number">10</span>),
                    <span class="hljs-comment">// SeekBar Widget</span>
                ],
              ),
            ],
          ),
        ),
        <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">20</span>),
      ],
    );
  }
</code></pre>
<p>The play/pause button in this application has a few jobs. First, it needs to listen to changes in the <code>_player</code> state. Second, it needs to change the UI (specifically the icon) depending on the state of the <code>_player</code> . Lastly, it needs to change the <code>_player</code> state when tapped. </p>
<p>Beginning with the job of listening to changes in state, any Flutter developer should immediately thing of Flutter's amazing widget <code>StreamBuilder</code> . This useful widget makes is incredibly easy to consume a <code>Stream</code> and react to change by modifying the UI with a  <code>builder</code> . In this case, the <code>Stream</code> we need to listen to, is of the type <code>PlayerState</code> which, thankfully, <code>just_audio</code> already provides for us. Reading the state of the <code>Stream</code> at any given moment, we can figure out whether the <code>_player</code> is currently playing or not and use the <code>builder</code> to display a play icon, a pause icon, a loading indicator, or even a replay icon if the audio file completes. Check the <code>just_audio</code> documentation for all the possible states. For each icon, we'll also attach a function to them to change the <code>_player</code> state when the icon is tapped.  </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1629740186179/finOzZvxe.png" alt="Untitled.png" /></p>
<p>AudioPlayer State Machine</p>
<h3 id="playpause-button">Play/Pause Button</h3>
<pre><code class="lang-dart">...

StreamBuilder&lt;PlayerState&gt;(
  stream: _player.playerStateStream,
  builder: (context, snapshot) {
    <span class="hljs-keyword">final</span> playerState = snapshot.data;

    <span class="hljs-keyword">if</span> (playerState == <span class="hljs-keyword">null</span>) {
      <span class="hljs-keyword">return</span> <span class="hljs-keyword">const</span> SizedBox.shrink();
    }

    <span class="hljs-keyword">final</span> processingState = playerState.processingState;

    <span class="hljs-keyword">final</span> playing = playerState.playing;
    <span class="hljs-keyword">if</span> (processingState == ProcessingState.loading ||
        processingState == ProcessingState.buffering) {
            <span class="hljs-comment">// Loading</span>
      <span class="hljs-keyword">return</span> Container(
        margin: <span class="hljs-keyword">const</span> EdgeInsets.all(<span class="hljs-number">8.0</span>),
        width: <span class="hljs-number">48.0</span>,
        height: <span class="hljs-number">48.0</span>,
        child: <span class="hljs-keyword">const</span> CircularProgressIndicator(),
      );
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (playing != <span class="hljs-keyword">true</span>) {
            <span class="hljs-comment">// Paused</span>
      <span class="hljs-keyword">return</span> IconButton(
        icon: <span class="hljs-keyword">const</span> Icon(Icons.play_arrow),
        iconSize: <span class="hljs-number">48.0</span>,
        onPressed: () {
          _player.play();
        },
      );
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (processingState != ProcessingState.completed) {
            <span class="hljs-comment">// Playing</span>
      <span class="hljs-keyword">return</span> IconButton(
        icon: <span class="hljs-keyword">const</span> Icon(Icons.pause),
        iconSize: <span class="hljs-number">48.0</span>,
        onPressed: () {
          _player.pause();
        },
      );
    } <span class="hljs-keyword">else</span> {
            <span class="hljs-comment">// Completed</span>
      <span class="hljs-keyword">return</span> IconButton(
        icon: <span class="hljs-keyword">const</span> Icon(Icons.replay),
        iconSize: <span class="hljs-number">48.0</span>,
        onPressed: () =&gt; _player.seek(
          <span class="hljs-built_in">Duration</span>.zero,
          index: _player.effectiveIndices!.first,
        ),
      );
    }
  },
),

...
</code></pre>
<p>The process for creating the seek bar is very similar to creating the play/pause button in the sense that it also uses a <code>Stream</code> to dynamically build the widget except it's a little more complicated and requires some extra finesse. In this case, we're listening to three different Stream. The first <code>Stream</code> we're listening to is a stream of the current audio's duration (in case it changes for some reason), the second <code>Stream</code> is the current position in the audio, and the final <code>Stream</code> is the buffered position to which buffered audio is available. To streamline things, I've gone ahead and combined the position stream and buffered position stream into one stream of type <code>PositionData</code> (defined later). The rest of the logic up to drawing the seek bar is just bounds checking to make the buffered position isn't greater than the duration and the normal position isn't greater than the duration. These streams get funneled into the seek bar which we're define in a moment.</p>
<pre><code class="lang-dart">...

Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    <span class="hljs-keyword">const</span> SizedBox(height: <span class="hljs-number">10</span>),
    StreamBuilder&lt;<span class="hljs-built_in">Duration?</span>&gt;(
      stream: _player.durationStream,
      builder: (context, snapshot) {
        <span class="hljs-keyword">final</span> duration = snapshot.data ?? <span class="hljs-built_in">Duration</span>.zero;

                <span class="hljs-comment">/* PositionData is a class we'll define in a sec */</span>
        <span class="hljs-keyword">return</span> StreamBuilder&lt;PositionData&gt;( 
          stream: Rx.combineLatest2&lt;<span class="hljs-built_in">Duration</span>, <span class="hljs-built_in">Duration</span>, PositionData&gt;(
              _player.positionStream,
              _player.bufferedPositionStream,
              (position, bufferedPosition) =&gt; PositionData(position, bufferedPosition),
                    ),
          builder: (context, snapshot) {
            <span class="hljs-keyword">final</span> positionData = snapshot.data ??
                PositionData(<span class="hljs-built_in">Duration</span>.zero, <span class="hljs-built_in">Duration</span>.zero);
            <span class="hljs-keyword">var</span> position = positionData.position;
            <span class="hljs-keyword">if</span> (position &gt; duration) {
              position = duration;
            }
            <span class="hljs-keyword">var</span> bufferedPosition =
                positionData.bufferedPosition;
            <span class="hljs-keyword">if</span> (bufferedPosition &gt; duration) {
              bufferedPosition = duration;
            }

                        <span class="hljs-comment">/* SEEKBAR IS A WIDGET WE'LL DEFINE IN A SEC */</span>
            <span class="hljs-keyword">return</span> SeekBar(
              duration: duration,
              position: position,
              bufferedPosition: bufferedPosition,
              onChangeEnd: (newPosition) {
                _player.seek(newPosition ?? <span class="hljs-keyword">const</span> <span class="hljs-built_in">Duration</span>());
              },
            );
          },
        );
      },
    ),
  ],
),

...
</code></pre>
<p>Before moving to the <code>SeekBar</code>, it's important to give create to where most of the code for the <code>SeekBar</code> comes from and that's amazing examples and tutorials others have made for <code>just_audio</code> . With that being said, since most of the code for the <code>SeekBar</code>, outside of superficial adjustments, has been gone over by others, I'll only be briefly mentioning how everything is working. </p>
<p>The <code>SeekBar</code> at its code is just two <a target="_blank" href="https://api.flutter.dev/flutter/material/Slider-class.html">Sliders</a>. One <code>Slider</code> is used to show the status of buffered position and the other <code>Slider</code> is used to show the status of the normal position. By moving the position <code>Slider</code> with our finger (or mouse if doing this in a simulator) the new position is recorded and seeked to by the <code>AudioPlayer</code> . There is also some text in the bottom right hand corner of the <code>SeekBar</code> to display the number of seconds left. </p>
<h3 id="seek-bar">Seek Bar</h3>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SeekBar</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatefulWidget</span> </span>{
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">Duration</span> duration;
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">Duration</span> position;
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">Duration?</span> bufferedPosition;
  <span class="hljs-keyword">final</span> ValueChanged&lt;<span class="hljs-built_in">Duration?</span>&gt;? onChanged;
  <span class="hljs-keyword">final</span> ValueChanged&lt;<span class="hljs-built_in">Duration?</span>&gt;? onChangeEnd;

  <span class="hljs-keyword">const</span> SeekBar({
    Key? key,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.duration,
    <span class="hljs-keyword">required</span> <span class="hljs-keyword">this</span>.position,
    <span class="hljs-keyword">this</span>.bufferedPosition,
    <span class="hljs-keyword">this</span>.onChanged,
    <span class="hljs-keyword">this</span>.onChangeEnd,
  }) : <span class="hljs-keyword">super</span>(key: key);

  <span class="hljs-meta">@override</span>
  _SeekBarState createState() =&gt; _SeekBarState();
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">_SeekBarState</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">State</span>&lt;<span class="hljs-title">SeekBar</span>&gt; </span>{
  <span class="hljs-built_in">double?</span> _dragValue;
  SliderThemeData? _sliderThemeData;

  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> didChangeDependencies() {
    <span class="hljs-keyword">super</span>.didChangeDependencies();

        <span class="hljs-comment">// A little bit of theming</span>
    _sliderThemeData = SliderTheme.of(context).copyWith(
      activeTrackColor: Colors.deepPurple,
      inactiveTrackColor: Colors.deepPurple,
      thumbColor: Colors.deepPurple,
      thumbShape: <span class="hljs-keyword">const</span> RoundSliderThumbShape(enabledThumbRadius: <span class="hljs-number">6.0</span>),
      trackHeight: <span class="hljs-number">2.0</span>,
    );
  }

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> Stack(
      children: [
        SliderTheme(
          data: _sliderThemeData!.copyWith(
            activeTrackColor: Colors.purple.shade200,
            inactiveTrackColor: Colors.grey.shade300,
            thumbShape: <span class="hljs-keyword">const</span> RoundSliderThumbShape(enabledThumbRadius: <span class="hljs-number">0.0</span>),
          ),
          child: ExcludeSemantics(
            child: Slider(
              min: <span class="hljs-number">0.0</span>,
              max: widget.duration.inMilliseconds.toDouble(),
              value: widget.bufferedPosition!.inMilliseconds.toDouble(),
              onChanged: (value) {
                setState(() {
                  _dragValue = value;
                });
                <span class="hljs-keyword">if</span> (widget.onChanged != <span class="hljs-keyword">null</span>) {
                  widget.onChanged!(<span class="hljs-built_in">Duration</span>(milliseconds: value.round()));
                }
              },
              onChangeEnd: (value) {
                <span class="hljs-keyword">if</span> (widget.onChangeEnd != <span class="hljs-keyword">null</span>) {
                  widget.onChangeEnd!(<span class="hljs-built_in">Duration</span>(milliseconds: value.round()));
                }
                _dragValue = <span class="hljs-keyword">null</span>;
              },
            ),
          ),
        ),
        SliderTheme(
          data: _sliderThemeData!.copyWith(
            inactiveTrackColor: Colors.transparent,
            valueIndicatorTextStyle: <span class="hljs-keyword">const</span> TextStyle(
              color: Colors.white,
            ),
          ),
          child: Slider(
            min: <span class="hljs-number">0.0</span>,
            max: widget.duration.inMilliseconds.toDouble(),
            value: min(_dragValue ?? widget.position.inMilliseconds.toDouble(),
                widget.duration.inMilliseconds.toDouble()),
            onChanged: (value) {
              setState(() {
                _dragValue = value;
              });
              <span class="hljs-keyword">if</span> (widget.onChanged != <span class="hljs-keyword">null</span>) {
                widget.onChanged!(<span class="hljs-built_in">Duration</span>(milliseconds: value.round()));
              }
            },
            onChangeEnd: (value) {
              <span class="hljs-keyword">if</span> (widget.onChangeEnd != <span class="hljs-keyword">null</span>) {
                widget.onChangeEnd!(<span class="hljs-built_in">Duration</span>(milliseconds: value.round()));
              }
              _dragValue = <span class="hljs-keyword">null</span>;
            },
          ),
        ),
        Positioned(
          right: <span class="hljs-number">16.0</span>,
          bottom: <span class="hljs-number">0.0</span>,
          child: Text(
              <span class="hljs-built_in">RegExp</span>(<span class="hljs-string">r'((^0*[1-9]\d*:)?\d{2}:\d{2})\.\d+$'</span>)
                      .firstMatch(<span class="hljs-string">"<span class="hljs-subst">$_remaining</span>"</span>)
                      ?.group(<span class="hljs-number">1</span>) ??
                  <span class="hljs-string">'<span class="hljs-subst">$_remaining</span>'</span>,
              style: Theme.of(context).textTheme.caption),
        ),
      ],
    );
  }

  <span class="hljs-built_in">Duration</span> <span class="hljs-keyword">get</span> _remaining =&gt; widget.duration - widget.position;
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PositionData</span> </span>{
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">Duration</span> position;
  <span class="hljs-keyword">final</span> <span class="hljs-built_in">Duration</span> bufferedPosition;

  PositionData(<span class="hljs-keyword">this</span>.position, <span class="hljs-keyword">this</span>.bufferedPosition);
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1629740211980/7zruDTgUH.jpeg" alt="Screenshot_20210822-204856.jpg" /></p>
<h1 id="conclusion">Conclusion</h1>
<p>And we're done! With the help of incredible libraries like <code>just_audio</code> it's insanely easy to create functional, cross-platform Flutter apps. For this app specifically, there are several improvements that could be made to make it better including, better state management, cleaner UI, and taking advantage of just_audio's powerful features to manipulate the audio (speed up, slow down, control volume, clip, etc). In the next part of this series, we're going to extend this app to pull audio from Google Drive and display it in a feed similar to twitter or instagram. </p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/L3Xht9xgVbU">https://youtu.be/L3Xht9xgVbU</a></div>
<p>The full project source code can be found at <a target="_blank" href="https://github.com/jonaylor89/AudioFeed">https://github.com/jonaylor89/AudioFeed</a></p>
<h1 id="in-the-loop-community">In The Loop Community</h1>
<p>We hope you've learned a bit more about the lifecycle of a song. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page <a target="_blank" href="https://hashnode.com/@itl_studios">@itl_studios</a> and we can give more information there if you shoot us a direct message!</p>
<h1 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h1>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at <a target="_blank" href="http://discord.gg/c7Hf3HX6Hh">discord.gg/c7Hf3HX6Hh</a></p>
<h1 id="further-reading-and-links">Further Reading &amp; Links</h1>
<ul>
<li>Audio library (<a target="_blank" href="https://pub.dev/packages/just_audio">https://pub.dev/packages/just_audio</a>)</li>
<li>More about the StreamBuilder component (<a target="_blank" href="https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html">https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html</a>)</li>
<li>More advanced state management (<a target="_blank" href="https://bloclibrary.dev/#/">https://bloclibrary.dev/#/</a>)</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[The Importance of Hashtags]]></title><description><![CDATA[Depending on when you were born, the # symbol can rather mean “pound,” “hashtag,” or even just a tic-tac toe board. Over the course of the past decade hashtags have taken over any campaign to promote products, music, etc. Its primary use is to boost ...]]></description><link>https://blog.intheloopstudio.com/the-importance-of-hashtags</link><guid isPermaLink="true">https://blog.intheloopstudio.com/the-importance-of-hashtags</guid><category><![CDATA[social media]]></category><category><![CDATA[Startups]]></category><category><![CDATA[SEO]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 11 Aug 2021 04:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1628545839235/gGU4af6OC.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Depending on when you were born, the # symbol can rather mean “pound,” “hashtag,” or even just a tic-tac toe board. Over the course of the past decade hashtags have taken over any campaign to promote products, music, etc. Its primary use is to boost reach and impressions on a post, while also programing a platforms algorithm to optimize a search to your post.</p>
<p>Hashtags play a vital role in improving a brand/person’s recognition and visibility. In today’s day and age social media can make or break an artist, so optimizing your hashtags can improve your target audience and make sure your work stays relevant.</p>
<h2 id="what-is-a-hashtag">What is a hashtag?</h2>
<p>In the rough definition, a hashtag is a label for content on blogs, social media, and all parts of the internet. It helps people quickly find content just through searching an app, search engine, etc.</p>
<p>In its most basic form a hashtag is the symbol followed by a word or sentence without spaces. A hashtag can look something as small as #music, as long as #InTheLoop, or even #😀 (with some sites/platforms supporting emoji hashtags).</p>
<p>Hashtags are often used on social media platforms such as TikTok, Instagram, and In The Loop! With its relevance and use stemming from Twitter.</p>
<h2 id="how-does-a-hashtag-work-with-algorithms">How does a hashtag work with algorithms?</h2>
<p>Hashtags often allow sites to recognize when a topic is trending. Algorithms want to make sure relevant topics are always being viewed on a platform to keep users engaged and active. When big events happen, such as the activism from #BlackLivesMatter in mid 2020, topics around the subjects of racial and systematic oppression were trending worldwide constantly. And with the hashtags trending during the peaceful protests anyone with internet access were able to view live footage of the organized marches and police brutality.</p>
<p>Hashtags are not limited to big stories or events, creators and artists can use them to market themselves, while also optimizing who their work will reach. In most cases today the proper use of hashtags can make a person’s career because you never know who will be watching/listening.</p>
<h2 id="what-is-search-engine-optimization-seo">What is Search engine Optimization (SEO)?</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1628545978514/Sbvmrks4k.png" alt="image.png" /></p>
<p>SEO is simply the process of improving your visibility within a search engine. The better visibility you have in searches, the better exposure you will have when people search your work. Music labels will often pay for ads based on words the general public would likely search for when wanting to hear new music from a rising artist just to make sure the link is the first one you see. A great example of an artist using hashtags to improve their SEO and relevance would be Lil Nas X.</p>
<p>Lil Nas X’s social media presence is a major factor in his success as he uses hashtags and his posts to promote his work uniquely from other artists in the industry. He started social media with a fan page to Nicki Minaj, but rose to stardom with his viral hit Old Town Road. For his recent releases he is using #FreeLilNasX in regards to his legal battle with Nike and #Montero the name of album and his own legal name to promote his music. Simply using these hashtags causes people to look up why he needs to be free or even just organically optimizing the word/name Montero which keeps himself more relevant in their minds while also promoting any work he currently is releasing.</p>
<p>Now that you know what SEO is and how hashtags are used successfully to improve it, how exactly does it work?</p>
<p>Search engines such as Google use bots to read through pages, blogs, posts, etc. to ollect information that may be relevant to searches being made by a user. Algorithms analyze the keywords and tags in addition to a plethora of other variables to determine the positioning of pages in the search results. SEO also factors in user experience where if a word/phrase is searched and the 3rd link is constantly clicked on, its positioning will move to the top.</p>
<p>Within social media platforms, hashtags help the search tool show your accounts when a keyword is searched if you are using a unique hashtag constantly.</p>
<h2 id="how-should-i-use-hashtags-on-social-media">How Should I use Hashtags on social media?</h2>
<p>This is dependent on your current following. If you are just starting your social brand, the key thing is to bring in followers that would resonate with your niche. If you are a punk rock band, you would be more successful using #punkrock vs #music. Being specific with your hashtags when you first start off will help grow your audience and gain followers more likely to interact with your posts.</p>
<p>As you become a bigger artist, hashtags are best used when releasing snippets of an upcoming album or promoting a project you are working on. This is because when your social following make many posts with #youralbumname or #campaignname, more people will be inclined to view the hashtag and move to your account. Also when your fans and audience use the hashtag it will help your SEO organically.</p>
<p>Some other tips for hashtags:</p>
<h4 id="1-limit-the-amount-of-hashtags">1. Limit the amount of hashtags</h4>
<h5 id="you-dont-want-to-have-posts-where-the-entire-caption-is-flooded-with-hashtags">You don't want to have posts where the entire caption is flooded with hashtags</h5>
<h4 id="2-hide-the-hashtags">2. Hide the hashtags</h4>
<h5 id="use">Use</h5>
<h5 id="lg">.</h5>
<h5 id="lg">.</h5>
<h5 id="lg">.</h5>
<h5 id="lg">.</h5>
<h5 id="lg">.</h5>
<h5 id="lg">.</h5>
<p>#this #at #the #end #of #your #posts</p>
<h5 id="this-helps-keep-your-content-clean-for-your-audience">This helps keep your content clean for your audience.</h5>
<h4 id="3-use-insightsanalytics">3. Use insights/analytics</h4>
<h5 id="use-the-analytics-to-find-out-which-hashtags-are-connecting-with-the-community">Use the analytics to find out which hashtags are connecting with the community</h5>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1628545683856/qaW1eZRW-.png" alt="image.png" /></p>
<h2 id="how-hashtags-will-be-used-on-in-the-loop">How Hashtags will be used on In The Loop</h2>
<p>Tagging will be made by you, the user, and it will help group together loops within similar genres. This will help our algorithm with providing content related to your viewing habits and also provide similar content to artists and producers within the same genre. With the hashtags, people can search for the tags to see related content.</p>
<h3 id="join-our-discord">Join Our Discord!</h3>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at discord.gg/c7Hf3HX6Hh</p>
]]></content:encoded></item><item><title><![CDATA[Meet the Camelot Wheel.]]></title><description><![CDATA[Making a mix
Have you ever heard an EDM mix before and wondered how everything can flow so seamlessly together? There is a bit of an art and science that goes into the process of cutting and pasting tracks together to create a unique mashup of popula...]]></description><link>https://blog.intheloopstudio.com/meet-the-camelot-wheel</link><guid isPermaLink="true">https://blog.intheloopstudio.com/meet-the-camelot-wheel</guid><category><![CDATA[music]]></category><category><![CDATA[Blogging]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 04 Aug 2021 14:29:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1628086792931/_K7bZAGw4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="making-a-mix">Making a mix</h2>
<p>Have you ever heard an EDM mix before and wondered how everything can flow so seamlessly together? There is a bit of an art and science that goes into the process of cutting and pasting tracks together to create a unique mashup of popular songs. A DJ, or EDM mix, is defined as: "A sequence of songs (tracks) that are typically mixed by a DJ so that the result appears as one continuous track." This is what we all know and love when we hear many songs combined in a way that excites the listener.</p>
<p>There are the <strong>two</strong> major components that need to be addressed when creating a mix: </p>
<ul>
<li>Beat Matching</li>
<li>Harmonic Compatibility</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1628086869511/VUqP7x5pm.jpeg" alt="dj-4729737_960_720.jpg" /></p>
<p><strong>Beat matching</strong> is a technique of pitch shifting or time stretching an upcoming track to match its tempo to that of the currently playing track. At its most basic level, it's just making sure that the tempo, or <em>speed</em>, of one song is equivalent to that of another in order to avoid awkward time changes. <strong>Harmonic Compatibility</strong> is the quality of how similar the key signatures of each song is. <em>This</em> begins to introduce a bit more complexity.</p>
<p>How are you supposed to know which key signatures work well together? It's easy to simply match tempos between songs, but figuring out compatible keys can be pretty tedious, and very hard to master in the heat of the moment. This is a music theory-heavy process of looking for key signatures that are one sharp or flat away from each other, or in the relative minor key. Essentially this means that all but one or two of the possible notes that can be played in a given song are present in the next.</p>
<p>If you're not very experienced with music theory, or you want a quicker way to figure this out, you can employ the <strong>Camelot Wheel</strong>, or <strong>Camelot System</strong>. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1627486205869/Ny9X7yfcgf.jpeg" alt="CamelotWheel.jpg" /></p>
<h2 id="what-exactly-is-the-camelot-wheel">What exactly is the Camelot Wheel?</h2>
<p>The Camelot Wheel is a system designed to make harmonic mixing highly simplified by choosing keys based on positions on a wheel. It was created by Mark Davis, and mainly featured in Mixed In Key, a highly popular DJ Mix making software. There are a set of rules that are recommended for guaranteed success in choosing songs, but creativity and experimentation are also always encouraged. </p>
<p><strong>Harmonic Mixing</strong> is just the process of combining songs using the concepts of <strong>Harmonic Compatibility</strong>.</p>
<p>Whether you're making a mix at home, live at a club, or simply interested in Harmonic Compatibility, this system is essential for simplifying the process of selecting songs. </p>
<h2 id="where-the-music-theory-comes-in">Where the music theory comes in</h2>
<p>Although it's not critical to understand music theory while using the Camelot Wheel, it can be very advantageous to learn a bit of what's going on behind the scenes. If you're new to music theory, don't worry! This is designed to be beginner friendly.</p>
<p>Some of the main points to review in order to understand the Camelot wheel are:</p>
<ul>
<li>Key signatures</li>
<li>Circle of Fourths / Fifths</li>
<li>Relative Minor</li>
</ul>
<h3 id="key-signatures">Key Signatures</h3>
<p>A <strong>Key Signature</strong> is the set of notes that are played in a given song. They are labeled by a <strong>note name</strong> and a 'quality', such as <strong>major</strong> or <strong>minor</strong>.  For example, C Major, A minor, Eb (pronounced E Flat) Major, or F# (pronounced F Sharp) minor, are all key signatures. </p>
<p>Key Signatures are one of the most fundamental characteristics of a piece of music. It determines what notes are played, meaning what notes will sound good, and what will sound bad. This drives note choices for all pitched instruments such as piano/keyboard, bass, vocals, and other instruments. Pretty important right? </p>
<p>Key Signatures are represented with sheet music using the following notation:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1627488061181/8WxYByXzc.webp" alt="B-flat-major-key-signature.png.webp" /></p>
<p>This particular key signature is Bb Major. You'll see soon how you can identify which key it is.</p>
<h3 id="circle-of-fourthsfifths">Circle of Fourths/Fifths</h3>
<p>All key signatures are relative to each other, and their relationships can be shown on the <strong>Circle of Fifths</strong> or <strong>Circle of Fourths</strong>. They are actually different names for the same circle, or wheel! By moving in clockwise, you are technically using the Circle of Fifths, and by moving counterclockwise, you are using the Circle of Fourths. Here's what it looks like:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1627598459168/AyLXv947i.png" alt="Screen Shot 2021-07-29 at 5.40.47 PM.png" /></p>
<p>Looks pretty similar to the Camelot Wheel right? That's because it essentially represents the exact same concept. Although it looks a bit scary, it really isn't bad at all. Here's how to read it.</p>
<p>Each key signature represents a unique number of sharps, or flats. If you start at C Major, with no sharps or flats, and then "add" one flat, you are now moving to F Major, or counterclockwise (Circle of Fourths). Furthermore, if you  start at C Major, and "add" one sharp, you are now moving to G Major, or clockwise (Circle of Fifths).</p>
<p>Closely positioned key signatures are highly compatible with each other. On the other hand, key signatures that are 3 or more positions away from each other tend to sound jarring when performed together, or in transition. So moving clockwise or counterclockwise by increments of 1 is guaranteed to sound good. What about the inner section of the circle?</p>
<h3 id="relative-minor">Relative Minor</h3>
<p>If we look at C Major on the Circle of Fourths/Fifths, we'll see that 'Am' is in the same slice. 'Am' represents the key of A Minor. These two keys actually <em>share</em> a key signature of no sharps or flats. This means that while using the same set of notes, we can represent C Major, and can also be represented by A Minor. This relationship is called the <strong>Relative Minor</strong> of a major key. </p>
<p>So by using a chord progression that predominantly emphasizes C Major, you can achieve a 'major' sound, and you can create a 'minor' sound with the same key signature, but while emphasizing A Minor. This means that you can easily transition between Relative Major and Minor when choosing songs.</p>
<p>Why does all of this matter? These concepts of Key Signatures, Circle of Fourths/Fifths, and Relative Minor are what determines Harmonic Compatibility. Pretty much just how well two songs can transition into one another. This is what creates the 'rules' of the Camelot Wheel, which we will get into.</p>
<h2 id="how-to-use-the-wheel-to-your-advantage">How to use the wheel to your advantage</h2>
<p>Now that you have a good understanding of how to read the Camelot Wheel, and how it relates to music theory, let's figure out how to use it! </p>
<p>It's quite simple to navigate the Camelot wheel! There are <strong>3</strong> main rules that guarantee a great sound in transition between songs:</p>
<ul>
<li>Mix tracks of the same key (e.g. 2A to 2A)</li>
<li>Mix tracks of the same number (e.g. 4B to 4A)</li>
<li>Mix tracks one number up, or one number down (e.g. 6B to 5B)</li>
</ul>
<p>Knowing and mastering these rules will ensure that all of your mixes are 'in key', and sound great. Often times, a great mix can excite an audience and elevate the experience of live music. The difference between harmonically compatible versus incompatible mixes is like night and day, very noticeable to people regardless of musical background.</p>
<h2 id="cheat-codes">Cheat Codes</h2>
<p>Although the Camelot Wheel should be used 9 times out of 10, there are two quick short cuts that can provide a quicker solution, but less consistent when used all the time. These are <strong>Key Sync</strong>, and using <strong>Beat Matching</strong> in sections that contain no harmonic or melodic content. Using these methods can circumvent the need for the Camelot Wheel, but doesn't always ensure the final result is a great sounding mix. They are more so quick fixes to be used for unique situations. </p>
<h3 id="key-sync">Key Sync</h3>
<p><strong>Key Sync</strong> is a feature provided by several DJ Mixing softwares, Rekordbox being a very popular one. It modulates a track to a desired key signature. For example, if you want to use a certain song in 2A on the Camelot Wheel, but you're currently at 5A, you can use Key Sync to modify the key of the upcoming track to be 2A. Often times, this will change the sound of the track very much, frequently giving vocals a noticeable change. </p>
<p>When you are in a pinch, and want to use a song that doesn't fare well using the Camelot Wheel, using Key Sync might be your best option.</p>
<h3 id="beat-matching">Beat Matching</h3>
<p>As mentioned earlier, Beat Matching is syncing the tempo of the upcoming track to the current one. If the sections you are mixing together do not contain harmonic or melodic content, then you can get away with mixing the songs together. Essentially, as long as there are only drums, or other percussive, non-pitched instruments, it should be fine to mix the two tracks together.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Now that you have a grasp of how to use the Camelot Wheel to make your mixes sound professional, it's time to put it to the test! There are some additional links below that provide further resources to take your harmonic mixing skills to the next level.</p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>We hope you've learned a bit more about the lifecycle of a song. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page @itl_studios and we can give more information there if you shoot us a direct message!</p>
<h2 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h2>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at discord.gg/c7Hf3HX6Hh</p>
<h2 id="links">Links</h2>
<ul>
<li><p>Interview with Mark Davis: Inventor of the Camelot Wheel
https://mixedinkey.com/book/how-to-use-harmonic-mixing/interview-with-mark-davis/ (Link) </p>
</li>
<li><p>What Is a DJ Mix (DJ Mix Set)?<br />https://www.passionforedm.com/blog/dj-mix/ (Link) </p>
</li>
<li><p>Mixing in key (YouTube video)
https://www.youtube.com/watch?v=U_tS7iMwU54 (Link) </p>
</li>
<li><p>Beatmatching:
https://en.wikipedia.org/wiki/Beatmatching (Link)</p>
</li>
<li><p>The Easiest Way to Mix In Key
https://www.youtube.com/watch?v=1sC-sZhSxU8 (Link)</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Internet Clout vs Industry Success]]></title><description><![CDATA[https://www.youtube.com/watch?v=R3yEBa93qzo
In The Loop Podcast #2:
John and Thomas join Illias Anwar, Founder of Clout Cloud and talk about growing a brand through a niche following, insights into working with famous rappers such as Meg the Stallion...]]></description><link>https://blog.intheloopstudio.com/internet-clout-vs-industry-success</link><guid isPermaLink="true">https://blog.intheloopstudio.com/internet-clout-vs-industry-success</guid><category><![CDATA[podcast]]></category><category><![CDATA[social media]]></category><category><![CDATA[Startups]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Sun, 01 Aug 2021 18:39:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1630528607848/dBfqMXi1i.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=R3yEBa93qzo">https://www.youtube.com/watch?v=R3yEBa93qzo</a></div>
<h4 id="in-the-loop-podcast-2">In The Loop Podcast #2:</h4>
<h5 id="john-and-thomas-join-illias-anwar-founder-of-clout-cloud-and-talk-about-growing-a-brand-through-a-niche-following-insights-into-working-with-famous-rappers-such-as-meg-the-stallion-and-lil-yachty-and-how-to-measure-and-be-successful-in-the-music-industry">John and Thomas join Illias Anwar, Founder of Clout Cloud and talk about growing a brand through a niche following, insights into working with famous rappers such as Meg the Stallion and Lil Yachty, and how to measure and be successful in the music industry.</h5>
]]></content:encoded></item><item><title><![CDATA[Lifecycle of a Song]]></title><description><![CDATA[Where to start?
What are the different sections of a song? Where can you find inspiration? How do you even begin? I found myself asking the same questions when I first began my journey as an artist and I would take a chance to guess you've asked your...]]></description><link>https://blog.intheloopstudio.com/lifecycle-of-a-song</link><guid isPermaLink="true">https://blog.intheloopstudio.com/lifecycle-of-a-song</guid><category><![CDATA[Blogging]]></category><category><![CDATA[music]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Wed, 28 Jul 2021 18:30:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1627485997692/_fZg5Fexs.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="where-to-start">Where to start?</h1>
<p>What are the different sections of a song? Where can you find inspiration? How do you even begin? I found myself asking the same questions when I first began my journey as an artist and I would take a chance to guess you've asked yourself the same questions. In this article, we will give an overview of the basics of songwriting and the process that goes into making songs from the arrangement and structure of a song, to mastering and distributing.</p>
<h1 id="writers-block">Writer's block</h1>
<p>One of the greatest aspect about a passion is that doing what you're passionate about can bring out the most creative side of you. I firmly believe that all artists write music for their own unique reason. It could be because of strong emotions or it could be inspiration from an event that happened in their life. The easy part is <em>feeling</em>. The hard part is <em>writing</em>. I've had days where I don't have a gram of creativity in my grinder and I have no ideas on what I want to make a song about. Richard Nordquist of ThoughtCo defines writers block as the condition when a skilled writer, with a desire to write, finds themselves unable to write. As artists, we all hit writers block at some point and this can be detrimental especially when starting a song. You can't build a house without a foundation. You need that structure and path but without the subject of the song, you could end up working for hours just to make... nothing. 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1627483826963/PqORBFQBx.jpeg" alt="balled paper.jpg" />
From the perspective of someone who's brain frequently blocks all creativity waves, I have done a few things that have helped stir up some ideas. One of the ways that I have passed writers block is working with sounds that I don't usually work with. It's amazing the amount of sounds available in sound packs and DAWs which can get the juices flowing. Another way that's worked for me is changing the scenery. Sure making beats in the studio is ideal, but have you ever brought your MacBook into IHOP and recorded with your friends? In all seriousness, moving around and setting up in a new location really opens up a window of new opportunities for your mind to release and create. The last way you can break the block, is by taking a break. We love to grind on our DAWs and without realizing it, we could be draining ourselves by over-producing. Going on a walk, getting outside, reading a book, or just laying down are all good get-aways which we all need once in a while.</p>
<h1 id="arrangement">Arrangement</h1>
<p>Songs have structures and formulas which contain pieces and sections like Lego bricks which when combined can make something wonderful. Some people say you should start with the title of the song. I think that the title should be a later piece because you won't really understand the whole song until it's finished. As the name implies, the first part of the song should be your intro. </p>
<h3 id="intro">Intro</h3>
<p>The first part of a song that sets the mood and tempo for the rest of the song.</p>
<h3 id="verse">Verse</h3>
<p>The lyrics come in and the story begins. In most songs there are at least two verses that can vary from each other slightly but keep the same feeling. Creativity really flourishes in this part of the song.</p>
<h3 id="pre-chorus">Pre Chorus</h3>
<p>This section is optional but helps to build up to the chorus. In many EDM songs this is apparent with the build ups to the drop of the song.</p>
<h3 id="chorus">Chorus</h3>
<p>As expected, the section following the pre chorus is called the chorus. This is where you create a memorable impact on the listener. The title of the song is also usually stated in lyrics during the chorus.</p>
<h3 id="bridge">Bridge</h3>
<p>This section is something I like to refer to as a "song in a song" because the bridge could be a key change, or a melody change that is separated from the previous repetition. </p>
<h3 id="outro">Outro</h3>
<p>A return to the original melody which could potentially be an isolation of a previous chord progression. You can slow down and eventually fade out to create an effect of resolution.</p>
<h1 id="lyrics-and-vocals">Lyrics and Vocals</h1>
<p>We talked a bit about ideas for creating lyrics and overcoming writers block, but how do successful artists finalize their lyrics? If you're a rap artist, freestyling is a talent but it's not a longaevus way to write songs for a project. The amount of thought and time that goes into your lyrics depends on what you are writing about. Rhyming is ideal when it comes to lyrics because it supports the emotions you bring in your music while creating an easy image in the listeners head. 
I was never a poet, in fact I was pretty bad when to came to writing but once I learned more about the structure of poems, it helped give guidelines for my lyrics. Chris Heckman of Studiobinder has a great definition of what a poem is where he says that a poem is a piece of writing that relies on rhyme, rhythm, and meter to evoke a feeling or to convey setting or story. That definition is exactly what lyrics for songs are about. Take these lyrics from The Notorious B.I.Gs Hypnotize as an example: 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1627484890392/ruK5cOtir.png" alt="nbig.PNG" />
Biggie places his accents and rhymes in an unconventional way that still works with the flow that he brings. He's able to do this while still telling a story and not just telling it but actually having it make sense.</p>
<h1 id="mixing-and-mastering">Mixing and Mastering</h1>
<p>Mixing and mastering tend to fall into the same conversation when it relates to music as they are both post-production steps but what is the difference between the two? Mixing refers to more of the editing of tracks by separating them and balancing the sounds. This can be done through the use of tools like EQ, compression, reverb, and panning to name a few. Mastering on the other hand is more related to the sound quality and production of the project. If you have varying sounds to each song on a project, a mastering engineer would create a sense of balance between the tracks to give the project a consistent feel. Both of these steps also include finding and fixing any mishaps that they run across when editing.  </p>
<h1 id="in-the-loop-community">In The Loop Community</h1>
<p>We hope you've learned a bit more about the lifecycle of a song. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. If you would be interested in being a beta tester, we have an Instagram page  @itl_studios and we can give more information there if you shoot us a direct message!</p>
<h1 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h1>
<p>Also, if you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at discord.gg/c7Hf3HX6Hh </p>
<h1 id="other-links">Other Links</h1>
<p>https://www.adorama.com/alc/music-production-tips-for-beginners/</p>
<p>https://www.thoughtco.com/writers-block-1692613 </p>
<p>https://mysongcoach.com/rhyming-in-contemporary-songs/ </p>
<p>https://www.studiobinder.com/blog/different-types-of-poems-examples/</p>
<p>https://www.izotope.com/en/learn/what-is-the-difference-between-mixing-and-mastering.html</p>
<p>https://www.musictech.net/guides/music-production-pro-tips-to-improve-your-tracks/ </p>
]]></content:encoded></item><item><title><![CDATA[The Cost of Music Production]]></title><description><![CDATA[What does it take to start out?
Becoming a music producer takes a lot of grit, time, and dedication to your craft. Money, of course, is a barrier you cross in almost every path of life you take and music production is no exception to this. Today, we'...]]></description><link>https://blog.intheloopstudio.com/the-cost-of-music-production</link><guid isPermaLink="true">https://blog.intheloopstudio.com/the-cost-of-music-production</guid><category><![CDATA[music]]></category><category><![CDATA[Startups]]></category><category><![CDATA[blog]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Tue, 20 Jul 2021 12:37:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1626659395950/cir-L74Fw.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="what-does-it-take-to-start-out">What does it take to start out?</h2>
<p>Becoming a music producer takes <em>a lot</em> of grit, time, and dedication to your craft. Money, of course, is a barrier you cross in almost every path of life you take and music production is no exception to this. Today, we're going to go over some of the basic, and not so basic <em>essentials</em> that every producer needs to have or at least be aware of. </p>
<h2 id="daws">DAWs</h2>
<p>In one of our previous articles, we briefly covered several of the top Digital Audio Workstations (DAWs) that are available for anyone to purchase online. We will go over 5 of the top DAWs and their prices in the list below as well as links to where you can purchase them.</p>
<h3 id="1-ableton-live">1. Ableton Live</h3>
<p>There are three versions of this DAW available:</p>
<p>Live 11 Intro - $99.00 USD or $16.50 USD/mo for 6 months</p>
<p>Live 11 Standard - $449.00 USD or $74.83 USD/mo for 6 months</p>
<p>Live 11 Suite - $749.00 USD or $124.83 USD/mo for 6 months</p>
<p>https://www.ableton.com/en/shop/live/</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653042411/0vp_D1na6.png" alt="Abletonpic2.PNG" />
[Photo credit: MusicTech]</p>
<h3 id="2-fl-studio">2. FL Studio</h3>
<p>There are four versions of this DAW available:</p>
<p>FL Studio Fruity Edition - $99.00 USD </p>
<p>FL Studio Producer Edition - $199.00 USD </p>
<p>FL Studio Signature Bundle - $299.00 USD</p>
<p>FL Studio All Plugins Edition - $499.00 USD</p>
<p>https://support.image-line.com/jshop/shop.php?_ga=2.158738425.2146600293.1626558338-282760107.1624988218</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653193412/1sTDGlUSf.jpeg" alt="flstudio20_produceredition_windows(1).jpg" />
[Photo credit: KVRAudio]</p>
<h3 id="3-logic-pro-x">3. Logic Pro X</h3>
<p>There is only one version of this DAW available:</p>
<p>Apple's Logic Pro X - $199.00 USD</p>
<p>https://apps.apple.com/us/app/logic-pro-x/id634148309?mt=12</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653368070/mDWlIf-TY.png" alt="logic2.PNG" />
[Photo credit: 9to5mac]</p>
<h3 id="4-steinberg-cubase-11">4. Steinberg Cubase 11</h3>
<p>There are three versions of this DAW available:</p>
<p>Cubase Pro 11 - $59.99 USD</p>
<p>Cubase Artist 11 - $337.98 USD</p>
<p>Cubase Elements 11 - $99.99 USD</p>
<p>steinberg.net/en/shop.html  </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653487714/62zT7WCrk.jpeg" alt="steinberg.jpg" />
[Photo credit: Soudnonsound]</p>
<h3 id="5-cockos-reaper-6">5. Cockos Reaper 6</h3>
<p>There are two versions of this DAW available:</p>
<p>Discounted License: $60.00 USD</p>
<p>Commercial License: $225.00 USD</p>
<p>https://www.reaper.fm/purchase.php</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653591668/AsKaoPzIb.webp" alt="reaper.webp" />
[Photo credit: Musicradar]</p>
<p>However, having just a DAW can only get you so far when it comes to music production. There are a few other parts and pieces that will allow you to completely be able to produce your own tracks.</p>
<h2 id="laptopcomputer">Laptop/Computer</h2>
<p>It makes sense that in order to produce music and create music digitally, you would need some form of laptop or computer to use your DAWs on. Options for these are limited to a few brands such as Apple, Dell, and Razer so we will just cover the prices of these three.</p>
<h3 id="apple-macbook-pro-13">Apple Macbook Pro 13"</h3>
<p>This laptop retails for $1,299.00 USD but if you are a student you would be able to buy it for $1,199.00 USD as well as receive a pair of AirPods.</p>
<p>https://www.apple.com/macbook-pro-13/</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653793828/A1BBKDyK2.jpeg" alt="macbook.jfif" />
[Photo credit: LifeWire]</p>
<h3 id="dell-xps-13-oled-2021">Dell XPS 13 OLED (2021)</h3>
<p>This laptop retails for $1,650.00 USD or you would be able to pay $55.00 USD/mo for 36 months through their website.</p>
<p>https://www.dell.com/en-us/shop/dell-laptops/new-xps-13-laptop/spd/xps-13-9310-laptop/xn9310cto235h?utm_source=narrativ&amp;AID=8836598&amp;cjevent=f14aec59e74e11eb80573eb20a82b839&amp;cjdata=MXxOfDB8WXww&amp;gacd=9694607-23736398-5750457-266319267-127795103&amp;dgc=af&amp;VEN1=12839518-8836598-VergeDellXPS13OLEDReview061121-Vox%20Media&amp;dclid=CJiXmcuU6_ECFX8hswAdllUMaA&amp;nclid=oYDIF_b_eZ00eyeaDqNxqCMGYSfchbYRbzTVp7kWo8ePSaa6SkzA4fHgWrOqEU8H</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626653915827/ZyQGselrj.png" alt="dell.png" />
[Photo credit: Review Geek]</p>
<h3 id="razer-blade-15-studio-edition">Razer Blade 15 Studio Edition</h3>
<p>One of the more expensive options for hardware, however, these laptops are heavily used in the gaming market because of their speed and efficiency. They retail for $1,699.99 USD or you could pay $107.00 USD/mo as well. </p>
<p>https://www.razer.com/gaming-laptops/Razer-Blade-15/RZ09-03287EM2-R3U1</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654026323/UkPK9cD1N.jpeg" alt="razer.jpg" />
[Photo credit: Laptop Mag]</p>
<h2 id="midi-controller">Midi Controller</h2>
<p>A complimentary piece of equipment to your DAWs which allows you to physically play out your chords and notes on a keyboard. Some of these instruments also have pads for drum presets to be loaded into as well as other features like looping, reverb, and modulations. We will go over the top three of our favorite midi controllers on the market now along with their prices and link to purchase.</p>
<h3 id="akai-mpk-mini-mk3">Akai MPK Mini mk3</h3>
<p>Akai is one of the most recognized brands when it comes to music production and their tool, the MPK Mini mk3 has everything that any producer could want when it comes to a midi controller. </p>
<p>This device retails for $119.00 USD and can be purchased almost anywhere online that sells production devices.</p>
<p>https://www.akaipro.com/mpk-mini-mk3</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654121183/xAkAaO4tw.jpeg" alt="akai.jfif" />
[Photo credit: Akai Pro]</p>
<h3 id="arturia-keylab-essential-49">Arturia KeyLab Essential 49</h3>
<p>Another recognizable name in the music production industry, this keyboard is special because it has 49 keys and gives more options for modulations than a smaller version.</p>
<p>This device retails for $269.00 USD and can be purchased on their site.</p>
<p>https://www.arturia.com/products/hybrid-synths/keylab-essential-49/overview</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654188377/NnbS1VC8i.jpeg" alt="arturia.jfif" />
[Photo credit: Arturia]</p>
<h3 id="native-instruments-komplete-kontrol-m32">Native Instruments Komplete Kontrol M32</h3>
<p>This 32-key controller is smaller than the previous however it contains two touch strips on the left side you can control. You are also able to purchase the same device with 49 and 61 keys on their website. </p>
<p>This device retails for $139.00 USD and can be purchased on their site.</p>
<p>https://www.native-instruments.com/en/products/komplete/keyboards/komplete-kontrol-m32/ </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654268454/pMek8LBxT.jpeg" alt="komplete.jfif" />
[Photo credit: Native Instruments]</p>
<h3 id="microphone-and-audio-interface">Microphone and Audio Interface</h3>
<p>Producing is great and when you're able to add your own vocals to what you create, the song becomes that much more unique. Not a singer? That's okay too because having a microphone will still allow you to record the instruments you play or any sound effects you want to record. Having a microphone opens doors for collaboration with vocal artists to come record in your studio. We will go ahead and give three of our top microphones on the market for you to buy.</p>
<h2 id="snowball-by-blue">Snowball by Blue</h2>
<p>These microphones have been around for a while and their spherical shape gives them a distinct personality which is boosted by their professional sound. This device does not need to use an audio interface as it plugs in via USB.</p>
<p>This microphone retails for $69.99 USD and can be purchased on Blue's site.</p>
<p>https://www.bluemic.com/en-us/products/snowball/</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654369187/0s0JIidZ2.jpeg" alt="snowball.jfif" />
[Photo credit: Newegg]</p>
<h2 id="rode-nt1-and-scarlett-4i4-focusrite">Rode NT1 and Scarlett 4i4 Focusrite</h2>
<p>One of the better condenser microphones on the market, Rode as a company has been a leader in their industry. The Scarlett Focusrite is easily one of the most recognizable audio interfaces used by producers everywhere with its glossy grit red design and compatibility with most microphones.</p>
<p>The Rode NT1 retails for $269.00 USD and comes with a shock mount and pop filter to help condense your sound.</p>
<p>https://reverb.com/p/rode-nt-1-kit-w-slash-shockmount-and-pop-filter?hfid=36727257&amp;utm_campaign=US-Shop_unpaid&amp;utm_medium=cpc&amp;utm_source=google </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654485158/egRs47eNa.jpeg" alt="roder.jfif" />
[Photo credit: Sweetwater]</p>
<p>The Scarlett 4i4 Focusrite retails for $239.99 USD and can be found on their website for purchase.</p>
<p>https://store.focusrite.com/en-gb/product/scarlett-4i4-3rd-gen/MOSC0026</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654563024/tndguO1fC.jpeg" alt="focusrite.jfif" />
[Photo credit: Kraftmusic]</p>
<h3 id="headphones">Headphones</h3>
<p>The quality of sound that headphones bring to your music is completely game-changing and technology continues to bring innovative sound-enhancing and canceling features. We will go into three of the best headphones for producers and artists, their price, and the link to purchase will be below. </p>
<h1 id="audio-technica-ath-m50x">Audio Technica ATH-M50X</h1>
<p>These are stylish and have every feature a producer could want. </p>
<p>These headphones retail for $149.00 USD and can be found at the link below.</p>
<p>https://www.amazon.com/Audio-Technica-ATH-M50x-Professional-Monitor-Headphones/dp/B00HVLUR86/ref=sr_1_3?tag=sogu-20&amp;keywords=Audio-Technica%20ATH-M50x&amp;qid=1561431970&amp;s=gateway&amp;sr=8-3&amp;geniuslink=true </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654634183/7CPbOwSPV.jpeg" alt="ath.jfif" />
[Photo credit: Audio-Technica]</p>
<h1 id="focul-listen-professional-studio-headphones">Focul Listen Professional Studio Headphones</h1>
<p>A medium-priced headphones for the intermediate to high-level producer. A sleek design and velvet red look differentiate it from other headphones in the market.</p>
<p>These headphones retail for $299.00 USD and can be found at the following link.</p>
<p>https://www.sweetwater.com/store/detail/ListenPro--focal-listen-pro-closed-back-reference-studio-headphones?mrkgadid=3341928437&amp;mrkgcl=28&amp;mrkgen=gpla&amp;mrkgbflag=0&amp;mrkgcat=studio&amp;recording&amp;acctid=21700000001645388&amp;dskeywordid=92700046937640807&amp;lid=92700046937640807&amp;ds_s_kwgid=58700005287223862&amp;ds_s_inventory_feed_id=97700000007215323&amp;dsproductgroupid=373167002574&amp;product_id=ListenPro&amp;prodctry=US&amp;prodlang=en&amp;channel=online&amp;storeid=&amp;device=c&amp;network=g&amp;matchtype=&amp;adpos=largenumber&amp;locationid=9007894&amp;creative=353486306307&amp;targetid=aud-321747046995:pla-373167002574&amp;campaignid=2005754838&amp;awsearchcpc=1&amp;gclid=CjwKCAjwos-HBhB3EiwAe4xM9xavebbiSPiGjieduuBsT8Qs_aDN0LQ1YjrXvQ-s1KgDm1lEyrCuwxoCytUQAvD_BwE&amp;gclsrc=aw.ds </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654705884/euITasZPo.jpeg" alt="focul.jfif" />
[Photo credit: Focal]</p>
<h1 id="sennheiser-hd-820">SENNHEISER HD 820</h1>
<p>Have a couple grand and not know what to do with it? These headphones can solve that issue. The third and priciest of these headphones, the SENNHEISER HD 820 matches and exceeds the monetary value by its production quality</p>
<p>These headphones retail for $1,790.00 USD and can be found at the following link.</p>
<p>https://www.amazon.com/Sennheiser-Over-Ear-Closed-Back-Headphones-Black/dp/B07D41MTT7/ref=sr_1_3?tag=sogu-20&amp;keywords=sennheiser%20hd800&amp;qid=1560790378&amp;s=gateway&amp;sr=8-3&amp;geniuslink=true </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654803789/c256czKsH.jpeg" alt="heiser.jfif" />
[Photo credit: Headphones]</p>
<h3 id="extras">Extras</h3>
<p>Now that you have put together a solid studio with your DAW, Microphone, Audio Interface, and Midi, you can start looking into special tools and equipment to help with your production. We will list ahead some of the extra pieces you can get for your studio as well as their prices and location for purchase.</p>
<h2 id="sound-proofing">Sound Proofing</h2>
<p>A very underestimated piece of equipment that works to control the sound of your voice and music when you use the microphone or speaker. If you've ever looked for soundproofing online, you'll know that there are a ton of choices through many different retailers but we found one of the best deals we could find for artists or producers.</p>
<h1 id="walmarts-store-online-has-these-packs-of-soundproofing-squares">Walmart's store online has these packs of soundproofing squares:</h1>
<ul>
<li>12 for $15.00 USD</li>
<li>24 for $28.00 USD</li>
<li>36 for $33.00 USD</li>
<li>38 for $43.00 USD</li>
<li>96 for $64.00 USD</li>
</ul>
<p>https://www.walmart.com/ip/12-24-36-48-96Pack-10x10x1-inches-Acoustic-Panels-Acoustic-Foam-Panels-Soundproof-Studio-Foam-Black/812967336?selected=true </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654880295/458x1Rabye.jpeg" alt="soundsquare.jfif" />
[Photo credit: Walmart]</p>
<h2 id="studio-chair">Studio Chair</h2>
<p>You know the feeling of not ever wanting to leave the studio even if it's late at night. You probably also know the back pain you can start to feel if you're grinding hard on a project and can't leave your seat. That's why having the best and most comfortable studio chair is so important, which we believe we have found.</p>
<h1 id="gt901-gaming-chair-footrest-series">GT901 Gaming Chair Footrest Series</h1>
<p>Another very recognizable name in the gaming industry, GTRacing has created a niche market of gamers and producers who love using these ultra-comfortable chairs made for long-term seating.</p>
<p>https://gtracing.com/collections/gtracing-footrest-series/products/footrest-series-gt901-black?gclid=CjwKCAjwos-HBhB3EiwAe4xM97mPnsYlM1OohUP3WQd-yC3FYhcB8uG_8pRBPFppMn9EjDyTj6Q3eRoCUOYQAvD_BwE</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626654947777/kFE5jkfGJ.png" alt="gtrac.png" />
[Photo credit: gtracing]</p>
<h2 id="sampling-service-subscription">Sampling Service Subscription</h2>
<p>Sampling isn't just cool, it's what some of the biggest artists on the planet do to create their most well-known projects. Luckily, there are tons of sites with great reputations and we've gone ahead and listed three that we appreciate and recommend.</p>
<h1 id="cymanticsfm">Cymantics.fm</h1>
<p>A very popular sample service that has tons of free samples, giveaways, and sound packs for purchase all conveniently on their website. </p>
<p>Their products range depending on which pack you want to buy. All of their products will be listed in the provided link below.</p>
<p>https://cymatics.fm/collections/store</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626655029942/tGAc1TpdW.png" alt="cymatics.png" />
[Photo credit: Cymatics]</p>
<h1 id="splicecom">Splice.com</h1>
<p>A website set up where artists and producers can post their samples and others can purchase them or rent samples and plugins straight from their site all royalty-free.</p>
<p>The range of prices varies depending on the thing you are looking for on the site and the link below will direct you to their page.</p>
<p>https://splice.com/</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626655096314/gWsS_4aKA.png" alt="splice.png" />
[Photo credit: Wintermusicconference]</p>
<h1 id="loopermancom">Looperman.com</h1>
<p>One of my personal favorite places that I've used for a number of years. Their filtering system makes it easy to find exactly what you're looking for.</p>
<p>Everything you'll need from this site is completely free! :)</p>
<p>https://www.looperman.com/</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626655194891/8SRBY73i5.png" alt="looperman.png" />
[Photo credit: Looperman]</p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>We hope you've learned a bit more about potential products for you and your studio. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs.</p>
<h2 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h2>
<p>If you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at discord.gg/c7Hf3HX6Hh</p>
<h2 id="other-links">Other Links</h2>
<p>https://cymatics.fm/</p>
<p>https://splice.com/</p>
<p>https://www.looperman.com/</p>
]]></content:encoded></item><item><title><![CDATA[Are we running out of music?]]></title><description><![CDATA[https://www.youtube.com/watch?v=eN_5CNaVghQ
In The Loop Podcast #1:
Chris and John of In The Loop talk to Thomas Levine of Code Beats about Learning Music during the Pandemic, the impact of TikTok on the music industry, and the looming concern of gen...]]></description><link>https://blog.intheloopstudio.com/are-we-running-out-of-music</link><guid isPermaLink="true">https://blog.intheloopstudio.com/are-we-running-out-of-music</guid><category><![CDATA[podcast]]></category><category><![CDATA[music]]></category><category><![CDATA[social media]]></category><category><![CDATA[learn coding]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Thu, 01 Jul 2021 23:25:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1630528708606/9Oi7Qkq4i.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/watch?v=eN_5CNaVghQ">https://www.youtube.com/watch?v=eN_5CNaVghQ</a></div>
<h4 id="in-the-loop-podcast-1">In The Loop Podcast #1:</h4>
<h5 id="chris-and-john-of-in-the-loop-talk-to-thomas-levine-of-code-beats-about-learning-music-during-the-pandemic-the-impact-of-tiktok-on-the-music-industry-and-the-looming-concern-of-genres-running-out-of-chord-progressions">Chris and John of In The Loop talk to Thomas Levine of Code Beats about Learning Music during the Pandemic, the impact of TikTok on the music industry, and the looming concern of genres running out of chord progressions.</h5>
]]></content:encoded></item><item><title><![CDATA[DAW (Digital Audio Workstation): Which one is right for you?]]></title><description><![CDATA[Introduction to DAWs
When I first began my journey as an audio producer, this term quickly became a need-to-know. It's interesting to learn that a Digital Audio Workstation, or DAW for short, is not just one device or software but can be a multitude ...]]></description><link>https://blog.intheloopstudio.com/daw-digital-audio-workstation-which-one-is-right-for-you</link><guid isPermaLink="true">https://blog.intheloopstudio.com/daw-digital-audio-workstation-which-one-is-right-for-you</guid><category><![CDATA[music]]></category><category><![CDATA[Startups]]></category><category><![CDATA[software]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Tue, 29 Jun 2021 18:49:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1624991585828/gz6h8bh1X.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="introduction-to-daws">Introduction to DAWs</h2>
<p>When I first began my journey as an audio producer, this term quickly became a need-to-know. It's interesting to learn that a Digital Audio Workstation, or DAW for short, is not just <em>one</em> device or software but can be a multitude of both. I know that the cover photo is something out of a producer's nightmare, but today we will break down the things that <strong>you need to know</strong> about DAWs and which DAW might be best for you. </p>
<h2 id="what-is-a-digital-audio-workstation">What is a Digital Audio Workstation?</h2>
<p>As previously mentioned, a DAW could be either software that you download such as Garageband, FL Studio, or Ableton, <em>or</em> it could be a conjunction of software and midi devices allowing you to record straight from wherever your studio is located. </p>
<h2 id="history-of-daws">History of DAWs</h2>
<p>The history of digital workstations goes way back to the 1930s when British scientist and inventor Alec Reeves created a method to digitally represent sampled analog symbols. This method became known as pulse-code modulation (PCM). You may have seen this abbreviation as .PCM when you bounce a project from the software you use. This method was not created for the main purpose it is used for today as its main function was for use in the military as a way to encrypt communication. Pulse-code modulation got its first real use in the music industry in the late 1970s. Soundstream, a record company, was one of the first companies to create a widely available digital audio tape recorder, giving power to the consumer to create tracks in their own home. Moving into the 1980s, computers began to have the capability to host digital audio editing software. The creation of compact discs (CDs) greatly increased the awareness of this technology as it broke a financial barrier that kept most people from using this technology. 1991 was a <em>very important</em> year for DAWs and the reason lies within a digital audio tool called Pro Tools by Digidesign for Mac. This system integrated multitrack recording and editing with visual digital mastering abilities on Macintosh computers. By the end of the 90s, Pro Tools was available on Windows as well as Macintosh The 2000s brought more options for software to use with the introduction of Ableton, Adobe Audition, Propellerhead Record, and Garageband. Today most of the previously mentioned software continues to be used and improved with new versions and updates releasing annually. The availability and accessibility of these programs are much easier because almost 50% of the world's population has a computer at home. The price for these DAWs is much lower. </p>
<h2 id="what-you-need">What you need</h2>
<p>Most artists and producers know the financial necessities that come along with the career and unfortunately, DAWs do come with a decent price tag in most cases. Of course, if you are creating your music using a DAW, you will need to have a laptop that is capable of downloading and performing the functions of the software you end up using. We will get into the varying options available for both Apple and Windows devices further in the article. The software as well comes with a cost ranging from $100 to even some at the $500 price tag. Along with this software, a midi device is essential to your workstation and is one that can open more doors for you down the line. </p>
<h1 id="choosing-the-best-for-you">Choosing the best for you</h1>
<p>The growing variety of DAW software applications available can make it difficult to find which software is best for you. We've gone ahead and put together a quick list of the top 5 used DAWs on the market right now.</p>
<p>1 <strong>Ableton Live 10</strong></p>
<p>Ableton has been around since the early 2000s and it serves as software for music creation and performance. Their interface is easy to maneuver around and they have a very good reputation as a big presence in the digital music industry. They offer many preloaded sounds and sound packs with the purchase of the software. The price for this depends on what you are looking for and your comfortability with DAWs. They offer Live Intro for $99, $449 for Live Standard, and $799 for Live Suite. This software is available on Mac, PC, and Linux. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624990160729/JBBNJNfYF.png" alt="Abletonpic.PNG" /></p>
<p>2 <strong>FL Studio 20</strong></p>
<p>Another very recognizable name (and logo) in the digital music industry, FL Studio has put itself in the spotlight of DAWs. In 1998, FruityLoops, FL for short, was an early digital audio workspace only available on PC. Luckily, in 2018 a MacOs-compatible version was created. A notable feature of FL Studio is that they have a mobile version for creating music on the go. For a fully unlocked version of FL Studio, it'll run you $737 but there are other options too such as just having full song creation and extra plugins -$299, full song creation and mic recording -$199, or the simplest version, basic melody and loop creation -$99.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624990264946/Y_KmAIjsb.png" alt="FLStudiopic.PNG" /></p>
<p>3 <strong>Pro Tools 2021.6</strong></p>
<p>As mentioned previously in the article, Pro Tools is a <em>real OG</em> when it comes to DAWs. There have been many updates since its release in the late 1980s. This software IS the industry-standard software so you know that this investment is worth the price. Another benefit of using Pro Tools is that it is optimized for multimedia projects. For example, if you wanted to sync a video with audio, this tool creates a simple and seamless way for that. The price of Pro Tools will cost you about $300 and is available on Mac, PC, or Linux. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624990428779/UDakMGuhT.png" alt="protoolspic.PNG" /></p>
<p>4 <strong>Logic Pro X</strong></p>
<p>This is where we get into an operating system-specific DAW. That's right. Logic Pro X was developed by Apple in the 1990s and has been one of the most popular DAWs to date even though it is only offered on MacOs. In my personal opinion, this application has the easiest interface to use as it is basically a Garageband if Garageband took steroids and got a nice haircut. If you are looking to purchase this software, the price for Logic is $200 all included. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624990641984/CMcvLUkqf.png" alt="logicproxpic.PNG" /></p>
<p>5 <strong>Bitwig</strong></p>
<p>This is one of the lesser-known DAWs on the market. Releasing in the early 2010s, they have been growing as a real competitor in the digital audio market. They offer a unique layout and powerful editing tools. Being a newer company than the others on this list, they have been able to see the successes and failures of the older software released by other companies. Its plugin visuals are appealing and make sense to the user. The price tag associated with Bitwig is $399 and it's available on all operating systems.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624990821521/PgQP0y3dv.png" alt="bitwigpic.PNG" /></p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>We hope you've learned a bit more about DAWs and which one is best for you. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. </p>
<h2 id="discord-stay-in-the-loop">Discord: Stay In The Loop</h2>
<p>If you enjoyed this blog post or any of our previous posts, be sure to join our Discord server which can be found at https://discord.gg/c7Hf3HX6Hh </p>
<h2 id="other-links">Other Links</h2>
<p>Interested in learning more about DAWs? Check out these other articles and videos to learn more!</p>
<p>https://www.youtube.com/watch?v=ZAX_iCSf-7k </p>
<p>https://medium.com/@christianharkna/choosing-your-daw-digital-audio-workstation-20e99c7e0f68 </p>
<p>https://www.mathworks.com/help/audio/gs/what-are-daws-audio-plugins-and-midi-controllers.html</p>
<p>https://blog.landr.com/best-daw/  </p>
]]></content:encoded></item><item><title><![CDATA[808's No Heartbreaks]]></title><description><![CDATA[808's
You may have heard of the term "808's" from the software you use to produce your music or maybe you've heard the term from the artists you've listened to in the past. In this day and age, most of the top records from some of the largest artists...]]></description><link>https://blog.intheloopstudio.com/808s-no-heartbreaks</link><guid isPermaLink="true">https://blog.intheloopstudio.com/808s-no-heartbreaks</guid><category><![CDATA[music]]></category><category><![CDATA[production]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Tue, 15 Jun 2021 17:15:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1623775554641/DDlln5pjS.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="808s">808's</h2>
<p>You may have heard of the term "808's" from the software you use to produce your music or maybe you've heard the term from the artists you've listened to in the past. In this day and age, most of the top records from some of the largest artists use 808's in their songs and if you have an interest in music production, it's important to have a full understanding of what exactly an 808 is. Get ready to deep-dive into the story of how 808's came to be and how they're used in music production today.</p>
<h2 id="what-is-an-808">What is an 808?</h2>
<p>I feel that it is essential to start by asking (and answering) this question. What in the world is an 808? To answer this we have to go back a few decades to the late 1970s. Music up to this point in time was mostly recorded in studios with physical instruments with multiple artists. In 1978, the company Roland Corporation decided to make its mark in the music industry by releasing a drum machine which at the time was relatively unheard of. They called this first drum machine CR-78 originally created for accompaniment as it gave users the ability to create and store their drum patterns. The legendary music songwriter and producer, Phil Collins, was one of the early users of this device using CR-78 in the song "In The Air Tonight". As the device gained popularity in the music industry, Roland continued to build and improve their drum machines. This brings us to 1980. This was a very important year because this is the year that Roland released a drum machine called The Roland TR-808 Rhythm Composer, a <em>completely new</em> and <em>innovative</em> way for producers to record their drum sounds. </p>
<p>The board consists of a circuit board at the bottom where there are 16 buttons where the user can store their prerecorded beats and play them over each other by switching multiple buttons down. Above the switches, you have your controls for panoramics and gain as well as a couple of tuning knobs. On the left side of the board you have the name of your preset, the pattern you want, and the kit you want to use which are all stored on the device. Below that section, there is volume control, an instrument selection knob, and your start/stop button.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623775938031/lj4_6zD2V.png" alt="tr-808picture.PNG" />
https://www.roland.com/us/products/rc_tr-808/ </p>
<h2 id="discontinued">Discontinued...</h2>
<p>Though the Roland TR-808 had an enormous impact on planting the seed for electronic drum machines, the device was discontinued only <em>three years (1983)</em> after its first production. There were a couple of reasons for this discontinuation: </p>
<ol>
<li><strong>A key component of the board that gives the iconic 808 sizzle sound lost it's supply</strong></li>
<li><strong>Competition from other companies</strong> </li>
</ol>
<p>Supplies for a very particular component of the 808, known as a 2SC828-R, had a limited supply and you're probably thinking, "Well why don't they just make more?". The reason being that in the late 1970s, Roland bought a large batch of rejected transistors which the company then thinned out to create the classic 808 sizzle sound. Since this was only one batch of faulty transistors, supply was limited and by the third year of production, the board was discontinued. Competition also played a large role in diminishing the sales and supply of the TR-808. The Linn LM-1 was one of their main competitors which saw more sales success... at first. </p>
<h2 id="patience-and-greatness">Patience and Greatness</h2>
<p>Sure the TR-808 was only in production for a few years and sure the sales may not have been what was expected, but as the music culture started to shift towards the use of more technology in production, producers began using the device more frequently in hits such as:</p>
<ul>
<li>"Paul Revere" - Beastie Boys (1986)</li>
<li>"I Want to Dance with Somebody" - Whitney Houston (1987)</li>
<li>"The Way You Move" - Outkast (2003)</li>
<li>"Love Lockdown" - Kanye West (2008)</li>
</ul>
<p>The video below goes into more detail about the use of 808's in these songs.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://vimeo.com/40094608">https://vimeo.com/40094608</a></div>
<h2 id="legacy">Legacy</h2>
<p>Previously mentioned was a song by Kanye West, "Love Lockdown". Most people know of Kanye's impact as an artist <strong>and</strong> producer in the music industry and have more than likely heard a song by him. In 2008, Kanye released his fourth studio album, 808's and Heartbreaks which since its release, has been one of the most influential projects ever released. The album dropped following the artists' mother's passing the previous year which allowed an emotional twist on the album that combined the use of emotional strings, icy keys, and many 808's. </p>
<p>This is a great example of the use of 808's in more modern music but 2008 was over a decade ago. Let's look at some examples of 808's in the 2010s. Welcome to the era of trap music ft. Metro Boomin. Technology had advanced exponentially going into the 2010s which meant that music production was becoming more and more technical with the techniques used as well as the rise of production software availability. Previous to this era, most people would have to go to a studio or send recorded music to a mixer or engineer to put their songs together. However, laptops and even smartphones started to release applications that anyone could purchase, for a price, which had pre-downloaded sound packs and an interface to create your own music. MIDI keyboards and microphones were becoming commonplace at producer's houses and in-house studios began to rise. Trap music gained popularity through this new availability of sounds and applications mainly in Atlanta where some of the biggest artists are out of. Trap refers to "selling drugs out of a house illegally" and the feeling that word brings was relayed in Trap Music. Gucci Mane is considered a pioneer in the trap music industry as apparent from his early releases such as "Lemonade" (2009) where we hear some of the first big Atlanta trap sounds. Moving into the next few years we see artists like Migos, Travis Scott, Drake, and most other big rap artists begin to use deep bass 808's in their music. </p>
<h2 id="808s-today">808's Today</h2>
<p>It doesn't seem that 808's will be going away anytime soon. If you take a look at the top genres of music today, hip-hop and rap are near the top of the list at number two. The use of 808's has only increased over time with the rise in producers like Metro Boomin, Wheezy, and Pierre Bourne. The biggest artists on the planet work with these producers and continue to crank out hit after hit using the classic 808 sound as well as adding hi-hat beats, snare hits, bass drum knocks, and open-hat sizzles among other sounds. On June 11, 2021, Pierre Bourne, a well-known producer released The Life of Pierre 5, one of his many projects to date. Pierre is known for his symbolic producer tag and his use of unique 808's in his music. This album showcases his use of 808's as well as his ability to rap over his own music.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623776280944/S18jar2Ds.jpeg" alt="TLOP5 cover.jfif" />
https://www.complex.com/music/pierre-bourne-the-life-of-pierre-5 </p>
<h2 id="how-can-you-use-808s">How can you use 808's?</h2>
<p>There are plenty of ways now where you can use an 808 or create your own. Online, many suppliers have sound packs for 808's that you can download and use on your software of choice. In your software, you will be able to manipulate the sound to make it however punchy or limited you want it to be and you have the ability to create patterns and loops. There are many software's you can use for example Apple's Logic Pro X. If you wanted to create an 808 sound, you can go into the preset channel ES2 Synthesizer, open up the board, select Analog Saw Init from the preset options, change the audio to mono, change the waveform to a sine wave (because that's what an 808 essentially is) and from there you can change other features to get it to the sound you want. Once you have your 808 preset loaded in and you've created a pattern you're comfortable with, you just have to add your other sounds and instruments to it and you could release the next Magnolia. </p>
<h2 id="in-the-loop-community">In The Loop Community</h2>
<p>We hope you've learned a bit more about what 808's are, their history, and how they are used in today's music. The entire purpose of In The Loop is to connect growing artists and producers and allow them to showcase their work in a space for constructive feedback while also participating in competitions tailored to the community. Currently, we are creating our community on Discord as we finalize our application, In The Loop. We are always looking for new beta testers to help improve the application so that we can be sure to match our app to user wants and needs. </p>
<h2 id="discord">Discord</h2>
<p>If you enjoyed this blog post, or any of our previous posts, be sure to join our Discord server which can be reached <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">here</a> or use this link: <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">https://discord.gg/c7Hf3HX6Hh</a></p>
<h2 id="other-links">Other Links:</h2>
<p>Interested in learning more about 808's and their impact on the music industry? Check out these other articles and videos to learn more!</p>
<p><a target="_blank" href="https://www.roland.com/us/promos/roland_tr-808/">https://www.roland.com/us/promos/roland_tr-808/</a> </p>
<p><a target="_blank" href="https://www.theverge.com/2017/4/3/15162488/roland-tr-808-music-drum-machine-revolutionized-music">https://www.theverge.com/2017/4/3/15162488/roland-tr-808-music-drum-machine-revolutionized-music</a> </p>
<p><a target="_blank" href="https://www.amazon.com/gp/video/detail/B06XSNHSY9/ref=atv_dp_share_cu_r">https://www.amazon.com/gp/video/detail/B06XSNHSY9/ref=atv_dp_share_cu_r</a> </p>
<p><a target="_blank" href="https://youtu.be/mx2xVaYhOYY">https://youtu.be/mx2xVaYhOYY</a> </p>
<p><a target="_blank" href="https://mixdownmag.com.au/features/columns/the-history-of-the-roland-tr-808-in-eight-iconic-tracks/">https://mixdownmag.com.au/features/columns/the-history-of-the-roland-tr-808-in-eight-iconic-tracks/</a> </p>
]]></content:encoded></item><item><title><![CDATA[How to Connect with Artists and Producers]]></title><description><![CDATA[Networking in Music Production
As a music producer and artist, it is essential that you network with other creators. It may sound cheesy and awkward to message and meet random people and try to sell yourself, but networking is about building long-ter...]]></description><link>https://blog.intheloopstudio.com/how-to-connect-with-artists-and-producers</link><guid isPermaLink="true">https://blog.intheloopstudio.com/how-to-connect-with-artists-and-producers</guid><category><![CDATA[music]]></category><category><![CDATA[networking]]></category><category><![CDATA[social media]]></category><category><![CDATA[Startups]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Tue, 08 Jun 2021 13:39:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1623156638494/3MctKtYuc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="networking-in-music-production">Networking in Music Production</h2>
<p>As a music producer and artist, it is essential that you network with other creators. It may sound cheesy and awkward to message and meet random people and try to sell yourself, but networking is about building long-term relationships that will help grow your career and talent as an artist and/or producer.</p>
<p>Here are some of the benefits to networking in the music industry:</p>
<h3 id="open-doors-to-other-artistsproducers"><strong>Open doors to other artists/producers:</strong></h3>
<p>Networking can open doors to collaborations, access to your peers’ followers and fans, and building lifelong friends within the music industry. As you and your connections grow as artists access to industry executives becomes more and more easier. By keeping up with your peers, you can stay in relevance with them and grow together.</p>
<h3 id="grow-your-career-and-skills"><strong>Grow your career and skills:</strong></h3>
<p>Meeting other talented creators will also drive your growth in music production. The mindset of surrounding yourself with success leads to success is key to never stop improving. Building a network of more successful artists and producers will change the concept of normal for you, which in effect will raise your drive.</p>
<h3 id="get-answers-to-any-question"><strong>Get answers to any question:</strong></h3>
<p>You’d be lying if you said there has never been a moment where you had no idea what you are doing or how to even get started. As long as you’ve built a reliable strong network, you can be confident that someone will answer those questions when they arise. And even if there’s no definite answer from your network, the simple conversation with your network can help you bounce ideas and form some initial findings.</p>
<h2 id="having-an-active-social-media-presence">Having an active Social Media Presence</h2>
<p>With social media often being the maker and breaker of many people's careers, it is extremely important for an artist and producer to have an active presence on most if not all channels. You never know when a song or beat of yours can become a viral hit, whether that may come from TikTok, Twitter, Youtube, etc. Also developing your online persona can lead to fans promoting your work for you just because they support you, and other artists and producers reaching out for collaborations.</p>
<h2 id="reaching-out-in-the-dms">Reaching out in the DMs</h2>
<p>This is the easiest and possibly the most effective tactic in reaching out to other creators. By directly messaging another person, you are giving them a chance to be discovered through your own network, while also exposing yourself to their fans as well. Although you can message almost anyone through social media there are a few general guidelines and steps that you should follow.</p>
<h3 id="knowing-who-you-can-message">Knowing who you can message</h3>
<p>You can't just message a famous person and expect them to want to collaborate or even read your messages. The first step to connecting and collaborating with others in music production is understanding that the relationship is based on sharing and not taking. You and the other person must benefit in some way, whether that be follower count, collaboration in a new genre, etc. Before deciding to reach out to someone you should gauge how you can help them before they can help you and putting yourself in their shoes of whether or not you would respond to someone in your situation reaching out.</p>
<h3 id="do-your-research-on-them">Do your research on them</h3>
<p>The next step is to do your research on them just so that your conversations can be more organic. Following them and keeping up with their uploads and past work allows you to understand where they are in their music careers. Also understanding where their goals are can help in seeing how you can help them. Looking into who your mutual connections are is also beneficial because you can reach out to these mutuals to help in an introduction.</p>
<h3 id="send-them-the-initial-dm">Send them the initial DM:</h3>
<p>Most likely the hardest part in reaching out is the first Direct Message. Knowing what to say and how forward to be is difficult, but here are a few good examples:</p>
<blockquote>
<p>Hey (artist name), love what you do, would love to connect!</p>
<p>Hey (artist name), I think your last (song, album, EP, etc.) was (some compliment), I (sing, produce, write, etc.) and would love to collaborate!</p>
<p>Hey I am (your name) and I (sing, produce, write, etc.), I think we could work together on making a (genre) (beat, song, etc.)</p>
</blockquote>
<p>While these examples are effective in being the first message, it is up to you to actually carry on the conversation. Using your research on them will play into the conversation as you can talk about yours and their goals, feedback on their previous work, talk about mutual connections, etc.</p>
<h3 id="keep-up-with-them">Keep up with them:</h3>
<p>After successfully connecting with them or even collaborating with them, make sure to keep up their work. Doing this will help in meeting even more people because if you stay fresh on people’s minds they will bring you up in conversation when they connect with others, doing networking for you.</p>
<h3 id="make-sure-to-check-your-own-requests">Make sure to check your own requests:</h3>
<p>Lastly a lot of social media apps block people from messaging you if you aren’t already following them. Check your inboxes because there may be people trying to connect and grow with you.</p>
<p>Don't be like T-Pain:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.instagram.com/p/COO3xFfBFzv/?utm_source=ig_embed&amp;utm_campaign=loading">https://www.instagram.com/p/COO3xFfBFzv/?utm_source=ig_embed&amp;utm_campaign=loading</a></div>
<h2 id="starting-your-own-community">Starting your own community</h2>
<p>Forming a community is probably the best thing for an artist/producer to keep their fans and their peers constantly in the loop. Having your own dedicated community can help out with outreach as your fans will do the networking for you. Imagine messaging your fans to help you get in contact with another artist and each fan actively commenting and DMing those artists for you.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1623169081202/urApSIySb.jpeg" alt="discordreddit.jpeg" /></p>
<h2 id="joining-established-communities">Joining established communities</h2>
<p>Although creating your own community has its major benefits, it can be time consuming and difficult to actually bring in and build. There are already established discord servers and subreddits that are specific for any type of artist. Also through these different communities, it is extremely easy to find other artists and producers looking for collaborations or just to build their network. Finding these communities is the hard part, but Reddit is a great source to get started!</p>
<p>Reddit Music Subreddit Wiki:
<a target="_blank" href="https://www.reddit.com/r/Music/wiki/musicsubreddits#wiki_production">https://www.reddit.com/r/Music/wiki/musicsubreddits#wiki_production</a></p>
<p>This wiki contains a plethora of subreddits for practically any niche of music communities. From these subreddits you can find other artists and producers wishing to collaborate and connect, while also finding different discord servers dedicated to the different sub genres. While browsing these subreddits, try not to limit yourself to one niche of creators, but rather diversify you scope of possible fans/peers.</p>
<h3 id="in-the-loop-community">In The Loop Community</h3>
<p>The entire purpose of In The Loop is to connect growing artists and producers. We are making it easier to share and keep track of your progress and samples while also getting constructive feedback from the community. The basis of our community is to grow together and bring more interest into music production. For the time being we are relying on our discord server to connect artists and producer, while our app is in development. We will be holding competitions and adding beta testers for the app. After launch we will rely on the community within the server to improve the app and experience.  </p>
<h2 id="join-our-discord">Join our Discord!</h2>
<p>If you are looking to get feedback in every stage of your music production join our discord community <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">here</a> or use this link: <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">https://discord.gg/c7Hf3HX6Hh</a></p>
<h2 id="some-other-sources-to-look-at">Some other sources to look at!</h2>
<p><a target="_blank" href="https://blog.reverbnation.com/2019/05/01/how-network-music-producer/">https://blog.reverbnation.com/2019/05/01/how-network-music-producer/</a></p>
<p><a target="_blank" href="https://rapzilla.com/2018-02-how-should-an-artist-approach-a-producer-online-artisttip/">https://rapzilla.com/2018-02-how-should-an-artist-approach-a-producer-online-artisttip/</a></p>
<p><a target="_blank" href="https://artistshortcut.com/how-to-connect-work-with-any-successful-rapper/">https://artistshortcut.com/how-to-connect-work-with-any-successful-rapper/</a></p>
<p><a target="_blank" href="https://www.musicgateway.com/blog/how-to/how-to-find-a-music-producer-that-is-perfect-for-you">https://www.musicgateway.com/blog/how-to/how-to-find-a-music-producer-that-is-perfect-for-you</a></p>
<p><a target="_blank" href="https://www.loopcloud.com/cloud/blog/4402-How-to-Promote-Yourself-as-a-Music-Producer">https://www.loopcloud.com/cloud/blog/4402-How-to-Promote-Yourself-as-a-Music-Producer</a></p>
<p>Cover photo found from:
<a target="_blank" href="https://mlsdev.com/blog/how-to-create-social-media-app">https://mlsdev.com/blog/how-to-create-social-media-app</a></p>
]]></content:encoded></item><item><title><![CDATA[In The Loop]]></title><description><![CDATA[Who are we?
Ciao!
We are In The Loop, a collaborative community of artists and producers. Our circles of content creators use our channels and app to find other music-minded individuals to work together and share samples of their work. We give constr...]]></description><link>https://blog.intheloopstudio.com/in-the-loop</link><guid isPermaLink="true">https://blog.intheloopstudio.com/in-the-loop</guid><category><![CDATA[startup]]></category><category><![CDATA[music]]></category><category><![CDATA[production]]></category><category><![CDATA[Art]]></category><category><![CDATA[introduction]]></category><dc:creator><![CDATA[In The Loop]]></dc:creator><pubDate>Mon, 31 May 2021 18:36:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622486268734/kJzoSZYwv.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="who-are-we">Who are we?</h1>
<p><em>Ciao!</em></p>
<p>We are In The Loop, a collaborative community of artists and producers. Our circles of content creators use our channels and app to find other music-minded individuals to work together and share samples of their work. We give constructive criticism, critique, and feedback so that we as a group can develop our music skills while also staying "in the loop" with each other's musical careers</p>
<h3 id="the-team">The Team:</h3>
<p><strong>Johannes Naylor</strong>, the business and technical guy </p>
<blockquote>
<p>I do the beep boops.</p>
</blockquote>
<p><strong>Christopher Estes</strong>, makes his computer do cool sounds</p>
<blockquote>
<p>Let's put these loops to good use!</p>
</blockquote>
<p><strong>Sohail Syed</strong>, Big Brother but less dystopian</p>
<blockquote>
<p>Is there a dark mode?</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622507544007/NvKC9zJiU.jpeg" alt="20210531_194521.jpg" /></p>
<p>(Pictured: Chris, Johannes, Sohail)</p>
<h1 id="our-backstory">Our Backstory</h1>
<p>The origins of In The Loop began with Chris. For years, Chris has been producing music on the side, making short beats, and posting them on Instagram for people to hear. This worked for a while until Chris finally had hard drives full of short (~30 seconds long) loops and samples that he'd love to collaborate with someone on to turn into a full song but couldn't figure out how. He didn't want to post them on Instagram or TikTok because of privacy issues, and Soundcloud isn't meant for short samples. Alas, if the thing you want doesn't exist, then build it - and for us that's In The Loop.</p>
<h1 id="our-vision">Our Vision</h1>
<p>With the problem at hand our aspiration is to build a centralized collaborative space for creators to showcase and store their music and short audio creations. We wish to give proper ownership and licensing to the creator and make it easy to share their work without the fear of their work being stolen. </p>
<p>To achieve this, we're developing an app and website where it's simple and easy to discover, store, and share samples. </p>
<p><strong>Demo:</strong></p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/7YWRxSDwAi8">https://youtu.be/7YWRxSDwAi8</a></div>
<p>In The Loop Alpha Prototype</p>
<h1 id="where-were-at">Where we're at</h1>
<p>We're building our community on Discord where artists and producers can post samples of their work and collaborate with others. We're keeping everyone engaged with competitions, beta testing of our in-progress app, and also company updates. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622507553976/3SWH8X1EW.png" alt="Screen_Shot_2021-05-31_at_2.54.55_PM.png" /></p>
<p>While we're using discord for now it isn't perfect. With the features that we have in mind, we're going to need something more custom which is why we're developing the mobile app for both iOS and Android that's currently in beta (if you're interested in being a part of the beta program, join the waitlist <a target="_blank" href="https://nzqgw10avlu.typeform.com/to/scNWQNtg">here</a>). With the completion of the app, we'll have a lot more control and flexibility for adding new features and experiences 👀</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622507575746/fvYBovxcB.jpeg" alt="Screenshot_20210521-000154.jpg" /></p>
<h1 id="how-to-stay-connected">How to Stay Connected</h1>
<p>To start sharing your loops and samples RIGHT NOW 🤯, join our discord community <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">here</a> or use this link: <a target="_blank" href="https://discord.gg/c7Hf3HX6Hh">https://discord.gg/c7Hf3HX6Hh</a></p>
]]></content:encoded></item></channel></rss>