{"id":1066,"date":"2024-04-03T23:16:44","date_gmt":"2024-04-03T14:16:44","guid":{"rendered":"https:\/\/blog.peddals.com\/?p=1066"},"modified":"2024-04-04T00:54:53","modified_gmt":"2024-04-03T15:54:53","slug":"flet-successful-building-app-with-audio","status":"publish","type":"post","link":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/","title":{"rendered":"Successful build of Flet app with Audio control"},"content":{"rendered":"\n<p>I have successfully built my own app, <a href=\"https:\/\/blog.peddals.com\/en\/intro-to-speech-plus-subtitles-player-flet-app\/\">Speech + Subtitles Player<\/a> made with Flet for Python by eliminating a line of code that required NumPy. However, <a href=\"https:\/\/blog.peddals.com\/en\/build-flet-app-for-macos\/\">adding copyright by template<\/a> caused building process to fail probably because of the audio control which seems to conflict with template file. Unfortunately, the <a href=\"https:\/\/flet.dev\/docs\/guides\/python\/packaging-app-for-distribution\/#native-python-packages\" target=\"_blank\" rel=\"noreferrer noopener\">official document<\/a> does not mention challenges about NumPy or Audio + template on macOS. If you&#8217;re looking for the solution, you found the right place.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">(My) Environment<\/h2>\n\n\n\n<p>The issues and the solutions were found with the followings. Different versions of Flet and\/or Flutter might result something different.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hardware: Mac Studio M2 Max 12-core CPU \/ 30-core GPU \/ 32GB RAM<\/li>\n\n\n\n<li>OS: macOS Sonoma 14.3.1<\/li>\n\n\n\n<li>Xcode: 15.3<\/li>\n\n\n\n<li>Python 3.11.7<\/li>\n\n\n\n<li>Flet: 0.21.2<\/li>\n\n\n\n<li>Flutter 3.19.3<\/li>\n\n\n\n<li>Dart: 3.3.1<\/li>\n\n\n\n<li>CocoaPods: 1.15.2<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Rewrite code to eliminate NumPy<\/h2>\n\n\n\n<p>My previous code used NumPy only to find the closed value of a subtitle&#8217;s end time to scroll  based on the current position of audio. It&#8217;s line #520. By changing it to the line #522, I was able to remove NumPy from my code (<a href=\"https:\/\/github.com\/tokyohandsome\/Speech-plus-Subtitles-Player\/blob\/main\/main.py\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a> code is updated). Commenting <code># import numpy as np<\/code> successfuly built the app by executing <code>flet build macos --include-packages flet_audio<\/code> now builds app with no issue. I do not notice any delay by making this change. <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\" data-line=\"520, 522\" data-start=\"516\"><code>    # Called when slider position is changed and scroll to subtitle with the nearest end_time.\n    async def scroll_to(self, e):\n        end_time = [item[2] for item in self.subtitles]\n        # Numpy is only used below:\n        #index = np.argmin(np.abs(np.array(end_time) - e))\n        # Below works without using Numpy:\n        index = min(range(len(end_time)), key=lambda i: abs(end_time[i]-e))\n        key=str(self.subtitles[index][0])\n        self.subs_view.scroll_to(key=key, duration =1000)\n        self.update()<\/code><\/pre><\/div>\n\n\n\n<p>Should you use NumPy a lot for a time sensitive app, you need to wait for Flet (<code>flet build<\/code>) to work with NumPy on Mac (I submitted an <a href=\"https:\/\/github.com\/flet-dev\/flet\/issues\/2932\" target=\"_blank\" rel=\"noreferrer noopener\">issue<\/a> ). Alternatively, you can use <code>flet pack main.py<\/code> which is not suggested officially but works (<a href=\"https:\/\/flet.dev\/docs\/guides\/python\/packaging-desktop-app\" target=\"_blank\" rel=\"noreferrer noopener\">see the official document<\/a>). <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simple build works but it fails by specifying template<\/h2>\n\n\n\n<p>As a next step, I tried to add copyright by specifying the template directory and faced another issue below. It shows lots of complicated version dependencies.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">% flet build macos --build-version \"1.0.1\" --template flet-build-template --include-packages flet_audio\nCreating Flutter bootstrap project\u2026OK\nCustomizing app icons and splash images\u2026OK\nGenerating app icons\u2026Because flet_audio &lt;0.20.1 depends on flet ^0.20.0 and flet_audio >=0.20.1 &lt;0.20.2 depends on flet ^0.20.1, flet_audio &lt;0.20.2 requires flet ^0.20.0. \nAnd because flet_audio ^0.20.2 depends on flet ^0.20.2 and flet_audio >=0.21.0 &lt;0.21.1 depends on flet ^0.21.0, flet_audio &lt;0.21.1 requires flet ^0.20.0 or ^0.21.0. \nAnd because flet_audio >=0.21.1 &lt;0.21.2 depends on flet ^0.21.1 and flet_audio >=0.21.2 depends on flet ^0.21.2, every version of flet_audio requires flet ^0.20.0 or >=0.21.0 &lt;0.22.0.\nSo, because fletaudioplayback depends on both flet ^0.19.0 and flet_audio any, version solving failed.\n\nYou can try the following suggestion to make the pubspec resolve:\n* Try upgrading your constraint on flet: dart pub add flet:^0.21.2\n\nError building Flet app - see the log of failed command above.<\/pre>\n\n\n\n<p>To avoid this error, you must forget about the template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SOLUTION: Use command options instead of template<\/h2>\n\n\n\n<p>I know it&#8217;s not smart but that&#8217;s the only way I found. Trash the template folder and use a couple of options as blow. Hope audio + template will work in the near future as well.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-zsh\" data-lang=\"ZSH\"><code>flet build macos --build-version &quot;1.0.1&quot; \\\n--copyright &quot;Copyright (c) 2024 Peddals.com&quot; \\\n--product &quot;Speech+SubtitlesPlayer&quot; --include-packages flet_audio<\/code><\/pre><\/div>\n\n\n\n<p>Quick hints: <code>--product<\/code> can name your app. If you don&#8217;t use this option, parent folder name will be your app name. <code>--include-packages flet_audio<\/code> is a requirement for an app that uses the Audio control. See <a href=\"https:\/\/flet.dev\/docs\/cli\/build\" target=\"_blank\" rel=\"noreferrer noopener\">this page<\/a> for the full list of options.<\/p>\n\n\n\n<p>Additional tip regarding your folder structure &#8212; when you build an app, remove all unnecessary files and folders. When I first built this app with few large audio files which were in another folder than the assets folder, building process took a long time and built app was 1.7GB in size. After removing the audio files, the app size became 260MB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Some notes about the built app<\/h2>\n\n\n\n<p>When I launched the app in <code>build\/macos<\/code> first time, I saw a white blank window and it took several seconds to draw contents such as buttons, texts, and a logo image. The reason was not the app itself, but an anti-virus software on my Mac that was running so hard consuming 300% of CPU to scan the app. Once it&#8217;s done, the app started running quickly. While playing audio, CPU usage is around 30-40%. I&#8217;m not sure why but the splash logo does not appear when the app is launched. Since it does not harm functionalities, I decided not to bother. Everything else works as expected. Nice.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bonus: Get coding assistance from Copilot (Bing Chat)<\/h2>\n\n\n\n<p>To rewrite the function with NumPy to native Python code, I got an assistance from Copilot, formerly Bing Chat free version. You better use paid version of generative AI services for serious production for sure, but the fee version works fine just as long as you understand that a few chat back and forth is needed to get an expected answer. Try giving enough but short requirements and complete in 5 round-trips. Below is an example, actual chat I had with Copilot.<\/p>\n\n\n\n<p><strong>You<\/strong><\/p>\n\n\n\n<p>can you help me rewrite an existing python code with numpy to python native without numpy? I&#8217;ll share a code with you<\/p>\n\n\n\n<p><strong>Copilot<\/strong><\/p>\n\n\n\n<p>Certainly! Please go ahead and share the existing Python code that uses NumPy, and I\u2019ll help you rewrite it using native Python constructs. &#x1f60a;<\/p>\n\n\n\n<p><strong><strong>You<\/strong><\/strong><\/p>\n\n\n\n<p>end_time is a list containing integers from the smallest to the largest. e is also an integer. import numpy as np. This is the actual code to be rewritten: index = np.argmin(np.abs(np.array(end_time) &#8211; e))<\/p>\n\n\n\n<p><strong>Copilot<\/strong><\/p>\n\n\n\n<p>Certainly! Let\u2019s rewrite the given code snippet that uses NumPy to achieve the same functionality using native Python without relying on NumPy.<\/p>\n\n\n\n<p>The original code snippet calculates the index of the element in the&nbsp;<code>end_time<\/code>&nbsp;list that is closest to the value of&nbsp;<code>e<\/code>. We\u2019ll achieve the same result using native Python constructs.<\/p>\n\n\n\n<p>Here\u2019s the rewritten code:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>def find_closest_index(end_time, e):\n    # Initialize variables to keep track of the minimum difference and index\n    min_difference = float(&#39;inf&#39;)  # Initialize with positive infinity\n    closest_index = None\n\n    # Iterate through the end_time list\n    for i, time_value in enumerate(end_time):\n        # Calculate the absolute difference between the current value and e\n        difference = abs(time_value - e)\n\n        # Update the closest index if the current difference is smaller\n        if difference &lt; min_difference:\n            min_difference = difference\n            closest_index = i\n\n    return closest_index\n\n# Example usage\nend_time = [1, 3, 6, 9, 12]  # Replace with your actual end_time list\ne = 7  # Replace with your actual value of e\nresult_index = find_closest_index(end_time, e)\nprint(&quot;Closest index:&quot;, result_index)<\/code><\/pre><\/div>\n\n\n\n<p>In this rewritten code:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We manually iterate through the&nbsp;<code>end_time<\/code>&nbsp;list.<\/li>\n\n\n\n<li>We calculate the absolute difference between each value in the list and&nbsp;<code>e<\/code>.<\/li>\n\n\n\n<li>We keep track of the index corresponding to the smallest difference encountered.<\/li>\n<\/ul>\n\n\n\n<p>Feel free to adapt this approach to your specific use case, and let me know if you need further assistance! &#x1f60a;<\/p>\n\n\n\n<p><strong>You<\/strong><\/p>\n\n\n\n<p>can you rewrite it to a one-liner with lambda?<\/p>\n\n\n\n<p><strong>Copilot<\/strong><\/p>\n\n\n\n<p>Certainly! Here\u2019s the equivalent one-liner using a&nbsp;<strong>lambda function<\/strong>:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-python\" data-lang=\"Python\"><code>find_closest_index = lambda end_time, e: min(range(len(end_time)), key=lambda i: abs(end_time[i] - e))<\/code><\/pre><\/div>\n\n\n\n<p>This lambda function calculates the index of the element in the&nbsp;<code>end_time<\/code>&nbsp;list that is closest to the value of&nbsp;<code>e<\/code>. It uses the&nbsp;<code>min()<\/code>&nbsp;function with a custom key function to find the index with the smallest absolute difference.<\/p>\n\n\n\n<p>Feel free to use this concise one-liner in your code! &#x1f60a;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Image by Stable Diffusion<\/h2>\n\n\n\n<p>This time I needed to exclude few words as initially generated images were all fat old man with big stomach. Face in close-up is detailed enough, but when it&#8217;s far Stable Diffusion tends to lose focus. Thumbnail looks fine though.<\/p>\n\n\n\n<p>Date:<br>2024-3-31 1:55:34<\/p>\n\n\n\n<p>Model:<br>realisticVision-v20_split-einsum<\/p>\n\n\n\n<p>Size:<br>512 x 512<\/p>\n\n\n\n<p>Include in Image:<br>realistic, masterpiece, best quality, retro future, happy young guy partially gray hair with glasses jumping with big simle in front of a beautiful building<\/p>\n\n\n\n<p>Exclude from Image:<br>frame, old, fat, suit<\/p>\n\n\n\n<p>Seed:<br>1847693693<\/p>\n\n\n\n<p>Steps:<br>50<\/p>\n\n\n\n<p>Guidance Scale:<br>20.0<\/p>\n\n\n\n<p>Scheduler:<br>DPM-Solver++<\/p>\n\n\n\n<p>ML Compute Unit:<br>CPU &amp; Neural Engine<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have successfully built my own app, Speech + Subtitles Player made with Flet for Python by eliminating a lin &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Successful build of Flet app with Audio control&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":984,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"en_US","_original_post":"https:\/\/blog.peddals.com\/?p=967","footnotes":""},"categories":[24,8,4],"tags":[12,18],"class_list":["post-1066","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-flet","category-macos","category-python","tag-mac","tag-python","en-US"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Successful build of Flet app with Audio control | Peddals Blog<\/title>\n<meta name=\"description\" content=\"Build your Python Flet app with Audio control successfully.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Successful build of Flet app with Audio control | Peddals Blog\" \/>\n<meta property=\"og:description\" content=\"Build your Python Flet app with Audio control successfully.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/\" \/>\n<meta property=\"og:site_name\" content=\"Peddals Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-03T14:16:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-03T15:54:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Handsome\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Handsome\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/\"},\"author\":{\"name\":\"Handsome\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"headline\":\"Successful build of Flet app with Audio control\",\"datePublished\":\"2024-04-03T14:16:44+00:00\",\"dateModified\":\"2024-04-03T15:54:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/\"},\"wordCount\":1029,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg\",\"keywords\":[\"mac\",\"Python\"],\"articleSection\":[\"Flet\",\"macOS\",\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/\",\"name\":\"Successful build of Flet app with Audio control | Peddals Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg\",\"datePublished\":\"2024-04-03T14:16:44+00:00\",\"dateModified\":\"2024-04-03T15:54:53+00:00\",\"description\":\"Build your Python Flet app with Audio control successfully.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.peddals.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg\",\"width\":512,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/en\\\/flet-successful-building-app-with-audio\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/blog.peddals.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Successful build of Flet app with Audio control\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.peddals.com\\\/\",\"name\":\"Peddals Blog\",\"description\":\"AI, LLM, Python, Mac, Pythonista3, iOS, etc. in Japanese and English\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.peddals.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.peddals.com\\\/#\\\/schema\\\/person\\\/81b2dabca748c3d11a45722f02d9d994\",\"name\":\"Handsome\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\",\"caption\":\"Handsome\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Successful build of Flet app with Audio control | Peddals Blog","description":"Build your Python Flet app with Audio control successfully.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/","og_locale":"en_US","og_type":"article","og_title":"Successful build of Flet app with Audio control | Peddals Blog","og_description":"Build your Python Flet app with Audio control successfully.","og_url":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/","og_site_name":"Peddals Blog","article_published_time":"2024-04-03T14:16:44+00:00","article_modified_time":"2024-04-03T15:54:53+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg","type":"image\/jpeg"}],"author":"Handsome","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Handsome","Est. reading time":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#article","isPartOf":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/"},"author":{"name":"Handsome","@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"headline":"Successful build of Flet app with Audio control","datePublished":"2024-04-03T14:16:44+00:00","dateModified":"2024-04-03T15:54:53+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/"},"wordCount":1029,"commentCount":0,"publisher":{"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"image":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg","keywords":["mac","Python"],"articleSection":["Flet","macOS","Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/","url":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/","name":"Successful build of Flet app with Audio control | Peddals Blog","isPartOf":{"@id":"https:\/\/blog.peddals.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#primaryimage"},"image":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg","datePublished":"2024-04-03T14:16:44+00:00","dateModified":"2024-04-03T15:54:53+00:00","description":"Build your Python Flet app with Audio control successfully.","breadcrumb":{"@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#primaryimage","url":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg","contentUrl":"https:\/\/blog.peddals.com\/wp-content\/uploads\/2024\/03\/realistic-masterpiece-best-quality-retro-future-happy-young-guy-pa.441.1847693693.jpg","width":512,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/blog.peddals.com\/en\/flet-successful-building-app-with-audio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/blog.peddals.com\/"},{"@type":"ListItem","position":2,"name":"Successful build of Flet app with Audio control"}]},{"@type":"WebSite","@id":"https:\/\/blog.peddals.com\/#website","url":"https:\/\/blog.peddals.com\/","name":"Peddals Blog","description":"AI, LLM, Python, Mac, Pythonista3, iOS, etc. in Japanese and English","publisher":{"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.peddals.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.peddals.com\/#\/schema\/person\/81b2dabca748c3d11a45722f02d9d994","name":"Handsome","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g","caption":"Handsome"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/51d7363349ec538c4d62c9ebe89488fd7388729ad0c9dfeebd8bb32ebfb11f17?s=96&d=mm&r=g"}}]}},"_links":{"self":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/1066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/comments?post=1066"}],"version-history":[{"count":16,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/1066\/revisions"}],"predecessor-version":[{"id":1102,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/posts\/1066\/revisions\/1102"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/media\/984"}],"wp:attachment":[{"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/media?parent=1066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/categories?post=1066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.peddals.com\/wp-json\/wp\/v2\/tags?post=1066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}