<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>각종정보창고</title>
    <link>https://infoarmory.tistory.com/</link>
    <description>앱 개발: iOS/iPadOS/macOS 앱을 개발하여 App Store에 출시하였고, 현재 운영중입니다. 
 - 음악 및 음악 이론 관련 앱: 4개 (오르골, 튜너, 이론학습 및 퀴즈 등)
 - 디퓨저 스틱 교체 관리 앱
 - macOS 용 포스트잇 
 - 어학 학습 최적화 이미지 번역 앱 등</description>
    <language>ko</language>
    <pubDate>Thu, 13 Aug 2026 10:51:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>정보조으미</managingEditor>
    <image>
      <title>각종정보창고</title>
      <url>https://tistory1.daumcdn.net/tistory/480106/attach/ab624e46fc7b4f0597204f7ff541a9d9</url>
      <link>https://infoarmory.tistory.com</link>
    </image>
    <item>
      <title>SPM 패키지 만드는 법: iOS 앱 등으로 테스트가 실시간으로 가능하게</title>
      <link>https://infoarmory.tistory.com/301</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 실시간으로 동작을 확인할 수 있는 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;iOS 데모 앱이 내장된&lt;/span&gt;&amp;nbsp;SPM 패키지를 만드는 방법을 단계별로 정리하겠습니다. 실제로도 기본적으로 Swift Package + iOS Demo App 구조를 권장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Swift Package 생성&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법 1: Xcode에서 직접 생성&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Xcode &amp;rarr; File &amp;rarr; New &amp;rarr; Package... 선택&lt;/li&gt;
&lt;li&gt;Multiplatform &amp;rarr; Library 선택&lt;/li&gt;
&lt;li&gt;테스트를 포함할 경우 Testing System에서 선택, 없으면 None 선택&lt;/li&gt;
&lt;li&gt;패키지 이름 입력 (예: MyFeatureKit) 및 저장 위치 선택&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT4Vjs/dJMcaheqLpI/1kAGGt2WItWy395kb0blL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT4Vjs/dJMcaheqLpI/1kAGGt2WItWy395kb0blL1/img.png&quot; data-alt=&quot;File &amp;amp;gt; New &amp;amp;gt; Package 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT4Vjs/dJMcaheqLpI/1kAGGt2WItWy395kb0blL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT4Vjs%2FdJMcaheqLpI%2F1kAGGt2WItWy395kb0blL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;421&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;File &amp;gt; New &amp;gt; Package 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwidpn/dJMcaiRUREa/ZxWgC4GJznt3Mb4urUlfkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwidpn/dJMcaiRUREa/ZxWgC4GJznt3Mb4urUlfkK/img.png&quot; data-alt=&quot;Multiplatform&amp;amp;nbsp;&amp;amp;rarr; Library 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwidpn/dJMcaiRUREa/ZxWgC4GJznt3Mb4urUlfkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwidpn%2FdJMcaiRUREa%2FZxWgC4GJznt3Mb4urUlfkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;257&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Multiplatform&amp;nbsp;&amp;rarr; Library 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSNhO/dJMcab6jkCr/nGZIJWPpd9XZgJphqEAfi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSNhO/dJMcab6jkCr/nGZIJWPpd9XZgJphqEAfi0/img.png&quot; data-alt=&quot;테스트를 포함할 경우 Testing System에서 선택, 없으면 None 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSNhO/dJMcab6jkCr/nGZIJWPpd9XZgJphqEAfi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSNhO%2FdJMcab6jkCr%2FnGZIJWPpd9XZgJphqEAfi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;115&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스트를 포함할 경우 Testing System에서 선택, 없으면 None 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성되면 기본 구조는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;MyFeatureKit/
 ├─ Package.swift
 ├─ Sources/
 │   └─ MyFeatureKit/
 │       └─ MyFeatureKit.swift
 └─ Tests/ (선택한 경우만)
     └─ MyFeatureKitTests/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. iOS 지원 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 &lt;b&gt;Package.swift&lt;/b&gt;에는 플랫폼 설정이 없을 수 있습니다. iOS 테스트를 위해 명시해주는 것이 좋습니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;// swift-tools-version: 5.9
import PackageDescription

let package = Package(
  name: &quot;MyFeatureKit&quot;,
  //   플랫폼 설정
  platforms: [
    .iOS(.v15)
  ],
  products: [
    .library(
      name: &quot;MyFeatureKit&quot;,
      targets: [&quot;MyFeatureKit&quot;]
    )
  ],
  targets: [
    .target(
      name: &quot;MyFeatureKit&quot;
    ),
    .testTarget(
      name: &quot;MyFeatureKitTests&quot;,
      dependencies: [&quot;MyFeatureKit&quot;]
    )
  ]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 실시간 테스트용 iOS 앱 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPM은 단독으로 실행할 수 없기 때문에 테스트용 Demo App을 같이 만드는 것이 좋습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;File &amp;rarr; New &amp;rarr; Project&lt;/li&gt;
&lt;li&gt;iOS App 선택&lt;/li&gt;
&lt;li&gt;SwiftUI 또는 UIKit 기반 생성&lt;/li&gt;
&lt;li&gt;[중요] 데모 프로젝트 앱의 위치를 Swift Package 폴더 내에 생성 (하단의 스크린샷 참조)&lt;/li&gt;
&lt;li&gt;생성 후 File &amp;rarr; Add Package Dependency&lt;/li&gt;
&lt;li&gt;화면 하단의 Add Local... 버튼 선택&lt;/li&gt;
&lt;li&gt;방금 만든 MyFeatureKit 폴더 선택&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLM3l1/dJMcaafix4h/NH22qieMc56Vq6M86NdKP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLM3l1/dJMcaafix4h/NH22qieMc56Vq6M86NdKP1/img.png&quot; data-alt=&quot;[중요] 데모 프로젝트 앱의 위치를 Swift Package 폴더 내에 생성 (하단의 스크린샷 참조)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLM3l1/dJMcaafix4h/NH22qieMc56Vq6M86NdKP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLM3l1%2FdJMcaafix4h%2FNH22qieMc56Vq6M86NdKP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;321&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[중요] 데모 프로젝트 앱의 위치를 Swift Package 폴더 내에 생성 (하단의 스크린샷 참조)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.03.11.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XYJEv/dJMcabFbw1h/YAStCPkPbINRRXwglZYNgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XYJEv/dJMcabFbw1h/YAStCPkPbINRRXwglZYNgK/img.png&quot; data-alt=&quot;Add Package Dependency 선택 후 팝업 창 하단의 Add Local... 버튼 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XYJEv/dJMcabFbw1h/YAStCPkPbINRRXwglZYNgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXYJEv%2FdJMcabFbw1h%2FYAStCPkPbINRRXwglZYNgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;154&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.03.11.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Add Package Dependency 선택 후 팝업 창 하단의 Add Local... 버튼 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;413&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6K5k3/dJMcacEecoR/baptB52hkajMrnzDuEB7ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6K5k3/dJMcacEecoR/baptB52hkajMrnzDuEB7ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6K5k3/dJMcacEecoR/baptB52hkajMrnzDuEB7ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6K5k3%2FdJMcacEecoR%2FbaptB52hkajMrnzDuEB7ik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;345&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;413&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데모 앱에서 다음과 같은 에러가 나오는데 이를 해결하기 위해 원래 '패키지'의 창을 닫습니다. 데모 앱의 다음 영역에서 패키지 실시간 구현 및 수정이 가능하기 때문입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.07.33.png&quot; data-origin-width=&quot;275&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q2ovd/dJMcahMbxJk/3gsCG4Eq1oDQNmLRlHGG2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q2ovd/dJMcahMbxJk/3gsCG4Eq1oDQNmLRlHGG2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q2ovd/dJMcahMbxJk/3gsCG4Eq1oDQNmLRlHGG2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq2ovd%2FdJMcahMbxJk%2F3gsCG4Eq1oDQNmLRlHGG2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;275&quot; height=&quot;78&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.07.33.png&quot; data-origin-width=&quot;275&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 패키지 창을 닫았는데도 오류가 발생한 경우 데모 앱의 창도 같이 닫았다 데모 앱 창만 다시 엽니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 창이 다음과 같이 나와야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.10.01.png&quot; data-origin-width=&quot;282&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CSeUz/dJMcaiRUSiM/ByTcOOT5bEfq4G9rZILazK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CSeUz/dJMcaiRUSiM/ByTcOOT5bEfq4G9rZILazK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CSeUz/dJMcaiRUSiM/ByTcOOT5bEfq4G9rZILazK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCSeUz%2FdJMcaiRUSiM%2FByTcOOT5bEfq4G9rZILazK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;282&quot; height=&quot;296&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.10.01.png&quot; data-origin-width=&quot;282&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 앱에서 바로 import 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;elm&quot;&gt;&lt;code&gt;import MyFeatureKit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 실시간 확인 구조 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예시: SwiftUI View를 패키지에 넣기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지 내부를 다음과 같이 구현합니다. 패키지만으로는 단독으로 확인하기 힘든 SwiftUI View를 추가해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패키지의 Sources &amp;gt; MyFeatureKit 의 MyFeature.swift를 열고 다음 코드를 추가합니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;import SwiftUI

public struct MyFeatureView: View {
  public init() {}

  public var body: some View {
    Text(&quot;Hello from Package&quot;)
      .font(.largeTitle)
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데모 앱에서 다음처럼 실행해봅니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;import SwiftUI
import MyFeatureKit

struct ContentView: View {
  var body: some View {
    MyFeatureView()
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 수정 &amp;rarr; ⌘R &amp;rarr; 바로 확인 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.13.46.png&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbeJsq/dJMcaiK3Npd/AQPnyYHHEYZOw4rg0SpTNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbeJsq/dJMcaiK3Npd/AQPnyYHHEYZOw4rg0SpTNk/img.png&quot; data-alt=&quot;데모 앱의 Preview 실행 화면 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbeJsq/dJMcaiK3Npd/AQPnyYHHEYZOw4rg0SpTNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbeJsq%2FdJMcaiK3Npd%2FAQPnyYHHEYZOw4rg0SpTNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;477&quot; height=&quot;225&quot; data-filename=&quot;스크린샷 2026-08-11 오후 10.13.46.png&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데모 앱의 Preview 실행 화면 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;UI가 아닌 로직 패키지일 경우&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;View 없이 로직만 테스트하는 방법은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Unit Test 활용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데모 앱 없이 단독으로 패키지를 개발하는 경우 단위 테스트 방법 등을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;또는 Demo App에서 버튼으로 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;swift&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;public struct Calculator {
  public init() {}

  public func add(_ a: Int, _ b: Int) -&amp;gt; Int {
    a + b
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에서&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot;&gt;&lt;code&gt;Button(&quot;Test&quot;) {
  print(Calculator().add(3, 5))
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[참고 1] 다른 실시간 테스트 방법&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SwiftUI Preview 활용&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;패키지 내부에서도 Preview 가능:&lt;/p&gt;
&lt;pre class=&quot;less&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;#Preview {
  MyFeatureView()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단, 패키지가 iOS 플랫폼을 명시해야 정상 동작합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Workspace 구조&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;gcode&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;MyWorkspace.xcworkspace
 ├─ MyFeatureKit (SPM)
 └─ MyFeatureDemoApp (iOS App)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패키지 수정&lt;/li&gt;
&lt;li&gt;앱에서 바로 반영&lt;/li&gt;
&lt;li&gt;Preview 가능&lt;/li&gt;
&lt;li&gt;브레이크포인트 디버깅 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Swift 패키지에서 다른 패키지 디펜던시(의존성)를 추가하는 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Swift Package에서 다른 Swift Package를 의존성으로 추가하려면 Package.swift의 dependencies와 해당 타깃의 dependencies에 등록하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 MyPackage에서 Alamofire를 사용한다고 하면 Package(...)내부에 dependencies, targets 를 설정합니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;// swift-tools-version: 5.9

import PackageDescription

let package = Package(
    name: &quot;MyPackage&quot;,
    // ... //
    //   의존성 추가
    dependencies: [
        .package(
            url: &quot;https://github.com/Alamofire/Alamofire.git&quot;,
            from: &quot;5.9.0&quot;
        )
    ],
    targets: [
        .target(
            name: &quot;MyPackage&quot;,
            //   targets 내에 dependencies 추가
            dependencies: [
                .product(
                    name: &quot;Alamofire&quot;,
                    package: &quot;Alamofire&quot;
                )
            ]
        )
    ]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 실제 Swift 패키지의 소스 파일에 import 합니다.&lt;/p&gt;
&lt;pre class=&quot;elm&quot;&gt;&lt;code&gt;import Alamofire&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;핵심 구조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dependencies에는 &lt;b&gt;패키지 자체&lt;/b&gt;를 등록하고, target의 dependencies에는 그 패키지가 제공하는 &lt;b&gt;product&lt;/b&gt;를 등록합니다.&lt;br /&gt;즉, &lt;b&gt;Package &amp;rarr; Dependency Package &amp;rarr; Product &amp;rarr; Target &lt;/b&gt;이라는 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;로컬 패키지를 불러오는 경우&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 프로젝트 디렉터리에 다른 패키지가 있다면 상대 경로를 &lt;b&gt;.package&lt;/b&gt;의 &lt;b&gt;path&lt;/b&gt;에 추가합니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;dependencies: [ 
    .package(path: &quot;../MyOtherPackage&quot;) // 로컬 패키지의 상대 경로 입력 
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;.target(
    name: &quot;MyPackage&quot;,
    dependencies: [
        .product(
            name: &quot;MyOtherPackage&quot;,
            package: &quot;MyOtherPackage&quot;
        )
    ]
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Swift(프로그래밍 언어)</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/301</guid>
      <comments>https://infoarmory.tistory.com/301#entry301comment</comments>
      <pubDate>Tue, 11 Aug 2026 22:25:53 +0900</pubDate>
    </item>
    <item>
      <title>서브도미넌트 마이너(SDm)와 그 대리 코드 [경음악편곡법, 재즈화성학]</title>
      <link>https://infoarmory.tistory.com/300</link>
      <description>&lt;div id=&quot;code_1786293016899&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/npm/abcjs@6.5.2/dist/abcjs-basic-min.min.js&amp;quot; id=&amp;quot;abcjs-plugin-js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;var objsArr=[],abcArr=[],synthArr=[];const onDomReady=()=&amp;gt;{document.querySelectorAll([&amp;quot;code.language-abc&amp;quot;,&amp;quot;code.abc&amp;quot;,&amp;quot;code.language-abcjs&amp;quot;,&amp;quot;pre &amp;gt; code.language-abc&amp;quot;].join(&amp;quot;, &amp;quot;)).forEach(((n,t)=&amp;gt;{const e=n.textContent,i=n.parentElement,a=&amp;#96;abcjs-notation-${t}&amp;#96;,o=&amp;#96;abcjs-audio-${t}&amp;#96;,s=document.createElement(&amp;quot;div&amp;quot;);s.innerHTML=&amp;#96;\n      &amp;lt;div id=&amp;quot;${a}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;\n      &amp;lt;div id=&amp;quot;${o}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;\n    &amp;#96;,i.replaceWith(s);var r=[a],c={responsive:&amp;quot;resize&amp;quot;,clickListener:clickListener},l=e,d=ABCJS.renderAbc(r,l,c);objsArr[t]=d,abcArr[t]=e,initSynth(t,d)})),document.querySelectorAll(&amp;quot;.abcjs-css-warning&amp;quot;).forEach((n=&amp;gt;n.remove())),document.querySelectorAll(&amp;quot;div.abcjs-inline-audio&amp;quot;).forEach(((n,t)=&amp;gt;{const e=n.parentElement;e&amp;amp;&amp;amp;e.insertAdjacentHTML(&amp;quot;afterend&amp;quot;,&amp;#96;&amp;lt;label&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10px; font-weight: bold;&amp;quot;&amp;gt;Transpose:&amp;lt;/span&amp;gt; \n            &amp;lt;input id=&amp;quot;transpose-${t}&amp;quot; \n            data-idx=&amp;quot;${t}&amp;quot; \n            class=&amp;quot;transpose-half-steps&amp;quot; \n            type=&amp;quot;number&amp;quot; \n            onchange=&amp;quot;redraw(${t}, this.value);&amp;quot;\n            min=&amp;quot;-12&amp;quot; \n            max=&amp;quot;12&amp;quot; \n            step=&amp;quot;1&amp;quot; \n            value=&amp;quot;0&amp;quot;&amp;gt;\n            &amp;lt;button style=&amp;quot;width: 30px;&amp;quot; onclick=&amp;quot;changeTransposeValue(${t}, -1);&amp;quot;&amp;gt;-&amp;lt;/button&amp;gt;\n            &amp;lt;button style=&amp;quot;width: 30px;&amp;quot; onclick=&amp;quot;changeTransposeValue(${t}, 1);&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;\n          &amp;lt;/label&amp;gt;&amp;#96;)}));const n=document.createElement(&amp;quot;style&amp;quot;);n.type=&amp;quot;text/css&amp;quot;,n.textContent='\n/* Some basic CSS to make the Audio controls in abcjs presentable. */\n\n.abcjs-inline-audio {\n\theight: 26px;\n\tpadding: 0 5px;\n\tborder-radius: 3px;\n\tbackground-color: #424242;\n\tdisplay: flex;\n\talign-items: center;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio.abcjs-disabled {\n\topacity: 0.5;\n}\n\n.abcjs-inline-audio .abcjs-btn {\n\tdisplay: block;\n\twidth: 28px;\n\theight: 34px;\n\tmargin-right: 2px;\n\tpadding: 7px 4px;\n\n\tbackground: none !important;\n\tborder: 1px solid transparent;\n\tbox-sizing: border-box;\n\tline-height: 1;\n}\n\n.abcjs-btn g {\n\tfill: #f4f4f4;\n\tstroke: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-btn:hover g {\n\tfill: #cccccc;\n\tstroke: #cccccc;\n}\n\n.abcjs-inline-audio .abcjs-midi-selection.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-reset.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg {\n\tdisplay: block;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-background {\n\tbackground-color: #424242;\n\theight: 10px;\n\tborder-radius: 5px;\n\tborder: 2px solid #cccccc;\n\tmargin: 0 8px 0 15px;\n\tposition: relative;\n\tflex: 1;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-indicator {\n\twidth: 20px;\n\tmargin-left: -10px; /* half of the width */\n\theight: 14px;\n\tbackground-color: #f4f4f4;\n\tposition: absolute;\n\tdisplay: inline-block;\n\tborder-radius: 6px;\n\ttop: -4px;\n\tleft: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-clock {\n\tmargin-left: 4px;\n\tmargin-top: 1px;\n\tmargin-right: 2px;\n\tdisplay: inline-block;\n\tfont-family: sans-serif;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\tcolor: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-tempo-wrapper {\n\tfont-size: 10px;\n\tcolor: #f4f4f4;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.abcjs-inline-audio .abcjs-midi-tempo {\n\tborder-radius: 2px;\n\tborder: none;\n\tmargin: 0 2px 0 4px;\n\twidth: 42px;\n\tpadding-left: 2px;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-loading .abcjs-loading-svg {\n\tdisplay: inherit;\n}\n\n.abcjs-inline-audio .abcjs-loading {\n\toutline: none;\n\tanimation-name: abcjs-spin;\n\tanimation-duration: 1s;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n\n}\n.abcjs-inline-audio .abcjs-loading-svg circle {\n\tstroke: #f4f4f4;\n}\n\n@keyframes abcjs-spin {\n\tfrom {transform:rotate(0deg);}\n\tto {transform:rotate(360deg);}\n}\n\n/* Adding the class &amp;quot;abcjs-large&amp;quot; will make the control easier on a touch device. */\n.abcjs-large .abcjs-inline-audio {\n\theight: 52px;\n}\n.abcjs-large .abcjs-btn {\n\twidth: 56px;\n\theight: 52px;\n\tfont-size: 28px;\n\tpadding: 6px 8px;\n}\n.abcjs-large .abcjs-midi-progress-background {\n\theight: 20px;\n\tborder: 4px solid #cccccc;\n}\n.abcjs-large .abcjs-midi-progress-indicator {\n\theight: 28px;\n\ttop: -8px;\n\twidth: 40px;\n}\n.abcjs-large .abcjs-midi-clock {\n\tfont-size: 32px;\n\tmargin-right: 10px;\n\tmargin-left: 10px;\n\tmargin-top: -1px;\n}\n.abcjs-large .abcjs-midi-tempo {\n\tfont-size: 20px;\n\twidth: 50px;\n}\n.abcjs-large .abcjs-tempo-wrapper {\n\tfont-size: 20px;\n}\n\n.abcjs-css-warning {\n\tdisplay: none;\n}\n',document.head.appendChild(n)};function CursorControl(n){var t=this;t.onStart=function(){var t=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg&amp;quot;),e=document.createElementNS(&amp;quot;http://www.w3.org/2000/svg&amp;quot;,&amp;quot;line&amp;quot;);e.setAttribute(&amp;quot;class&amp;quot;,&amp;quot;abcjs-cursor&amp;quot;),e.setAttributeNS(null,&amp;quot;x1&amp;quot;,0),e.setAttributeNS(null,&amp;quot;y1&amp;quot;,0),e.setAttributeNS(null,&amp;quot;x2&amp;quot;,0),e.setAttributeNS(null,&amp;quot;y2&amp;quot;,0),t.appendChild(e)},t.beatSubdivisions=2,t.onEvent=function(t){if(!t.measureStart||null!==t.left){for(var e=document.querySelectorAll(&amp;quot;#&amp;quot;+n+&amp;quot; svg .highlight&amp;quot;),i=0;i&amp;lt;e.length;i++)e[i].classList.remove(&amp;quot;highlight&amp;quot;);for(var a=0;a&amp;lt;t.elements.length;a++)for(var o=t.elements[a],s=0;s&amp;lt;o.length;s++)o[s].classList.add(&amp;quot;highlight&amp;quot;);var r=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg .abcjs-cursor&amp;quot;);r&amp;amp;&amp;amp;(r.setAttribute(&amp;quot;x1&amp;quot;,t.left-2),r.setAttribute(&amp;quot;x2&amp;quot;,t.left-2),r.setAttribute(&amp;quot;y1&amp;quot;,t.top),r.setAttribute(&amp;quot;y2&amp;quot;,t.top+t.height))}},t.onFinished=function(){for(var t=document.querySelectorAll(&amp;quot;#&amp;quot;+n+&amp;quot; svg .highlight&amp;quot;),e=0;e&amp;lt;t.length;e++)t[e].classList.remove(&amp;quot;highlight&amp;quot;);var i=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg .abcjs-cursor&amp;quot;);i&amp;amp;&amp;amp;(i.setAttribute(&amp;quot;x1&amp;quot;,0),i.setAttribute(&amp;quot;x2&amp;quot;,0),i.setAttribute(&amp;quot;y1&amp;quot;,0),i.setAttribute(&amp;quot;y2&amp;quot;,0))}}function clickListener(n,t,e,i,a,o){var s=n.midiPitches;s&amp;amp;&amp;amp;ABCJS.synth.playEvent(s,n.midiGraceNotePitches,1e3).then((function(n){console.log(&amp;quot;note played&amp;quot;)})).catch((function(n){console.log(&amp;quot;error playing note&amp;quot;,n)}))}function redraw(n,t){const e=abcArr[n];objsArr[n]=ABCJS.renderAbc(&amp;#96;abcjs-notation-${n}&amp;#96;,e,{visualTranspose:t,responsive:&amp;quot;resize&amp;quot;,clickListener:clickListener}),synthArr.forEach((n=&amp;gt;{n.pause()})),initSynth(n,objsArr[n],t)}function initSynth(n,t,e=0){var i=new CursorControl(&amp;#96;abcjs-notation-${n}&amp;#96;,null),a=new ABCJS.synth.SynthController,o=document.getElementById(&amp;#96;abcjs-audio-${n}&amp;#96;);a.load(o,i,{displayRestart:!0,displayPlay:!0,displayProgress:!0}),a.disable(!0),synthArr[n]=a,(new ABCJS.synth.CreateSynth).init({visualObj:t[0],options:{responsive:&amp;quot;resize&amp;quot;}}).then((()=&amp;gt;{a&amp;amp;&amp;amp;a.setTune(t[0],!1,{midiTranspose:e}).catch((n=&amp;gt;{console.warn(&amp;quot;Audio problem:&amp;quot;,n)}))})).catch((n=&amp;gt;{console.warn(&amp;quot;Audio problem:&amp;quot;,n)}))}function changeTransposeValue(n,t=1){var e=document.querySelector(&amp;#96;#transpose-${n}&amp;#96;);t=parseInt(t);let i=parseInt(e.value);e.value=i+t,redraw(n,e.value)}document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,onDomReady);&amp;lt;/script&amp;gt;&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/npm/abcjs@6.5.2/dist/abcjs-basic-min.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;var objsArr=[],abcArr=[],synthArr=[];const onDomReady=()=&gt;{document.querySelectorAll([&quot;code.language-abc&quot;,&quot;code.abc&quot;,&quot;code.language-abcjs&quot;,&quot;pre &gt; code.language-abc&quot;].join(&quot;, &quot;)).forEach(((n,t)=&gt;{const e=n.textContent,i=n.parentElement,a=`abcjs-notation-${t}`,o=`abcjs-audio-${t}`,s=document.createElement(&quot;div&quot;);s.innerHTML=`\n      &lt;div id=&quot;${a}&quot;&gt;&lt;/div&gt;\n      &lt;div id=&quot;${o}&quot;&gt;&lt;/div&gt;\n    `,i.replaceWith(s);var r=[a],c={responsive:&quot;resize&quot;,clickListener:clickListener},l=e,d=ABCJS.renderAbc(r,l,c);objsArr[t]=d,abcArr[t]=e,initSynth(t,d)})),document.querySelectorAll(&quot;.abcjs-css-warning&quot;).forEach((n=&gt;n.remove())),document.querySelectorAll(&quot;div.abcjs-inline-audio&quot;).forEach(((n,t)=&gt;{const e=n.parentElement;e&amp;&amp;e.insertAdjacentHTML(&quot;afterend&quot;,`&lt;label&gt;&lt;span style=&quot;font-size: 10px; font-weight: bold;&quot;&gt;Transpose:&lt;/span&gt; \n            &lt;input id=&quot;transpose-${t}&quot; \n            data-idx=&quot;${t}&quot; \n            class=&quot;transpose-half-steps&quot; \n            type=&quot;number&quot; \n            onchange=&quot;redraw(${t}, this.value);&quot;\n            min=&quot;-12&quot; \n            max=&quot;12&quot; \n            step=&quot;1&quot; \n            value=&quot;0&quot;&gt;\n            &lt;button style=&quot;width: 30px;&quot; onclick=&quot;changeTransposeValue(${t}, -1);&quot;&gt;-&lt;/button&gt;\n            &lt;button style=&quot;width: 30px;&quot; onclick=&quot;changeTransposeValue(${t}, 1);&quot;&gt;+&lt;/button&gt;\n          &lt;/label&gt;`)}));const n=document.createElement(&quot;style&quot;);n.type=&quot;text/css&quot;,n.textContent='\n/* Some basic CSS to make the Audio controls in abcjs presentable. */\n\n.abcjs-inline-audio {\n\theight: 26px;\n\tpadding: 0 5px;\n\tborder-radius: 3px;\n\tbackground-color: #424242;\n\tdisplay: flex;\n\talign-items: center;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio.abcjs-disabled {\n\topacity: 0.5;\n}\n\n.abcjs-inline-audio .abcjs-btn {\n\tdisplay: block;\n\twidth: 28px;\n\theight: 34px;\n\tmargin-right: 2px;\n\tpadding: 7px 4px;\n\n\tbackground: none !important;\n\tborder: 1px solid transparent;\n\tbox-sizing: border-box;\n\tline-height: 1;\n}\n\n.abcjs-btn g {\n\tfill: #f4f4f4;\n\tstroke: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-btn:hover g {\n\tfill: #cccccc;\n\tstroke: #cccccc;\n}\n\n.abcjs-inline-audio .abcjs-midi-selection.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-reset.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg {\n\tdisplay: block;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-background {\n\tbackground-color: #424242;\n\theight: 10px;\n\tborder-radius: 5px;\n\tborder: 2px solid #cccccc;\n\tmargin: 0 8px 0 15px;\n\tposition: relative;\n\tflex: 1;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-indicator {\n\twidth: 20px;\n\tmargin-left: -10px; /* half of the width */\n\theight: 14px;\n\tbackground-color: #f4f4f4;\n\tposition: absolute;\n\tdisplay: inline-block;\n\tborder-radius: 6px;\n\ttop: -4px;\n\tleft: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-clock {\n\tmargin-left: 4px;\n\tmargin-top: 1px;\n\tmargin-right: 2px;\n\tdisplay: inline-block;\n\tfont-family: sans-serif;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\tcolor: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-tempo-wrapper {\n\tfont-size: 10px;\n\tcolor: #f4f4f4;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.abcjs-inline-audio .abcjs-midi-tempo {\n\tborder-radius: 2px;\n\tborder: none;\n\tmargin: 0 2px 0 4px;\n\twidth: 42px;\n\tpadding-left: 2px;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-loading .abcjs-loading-svg {\n\tdisplay: inherit;\n}\n\n.abcjs-inline-audio .abcjs-loading {\n\toutline: none;\n\tanimation-name: abcjs-spin;\n\tanimation-duration: 1s;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n\n}\n.abcjs-inline-audio .abcjs-loading-svg circle {\n\tstroke: #f4f4f4;\n}\n\n@keyframes abcjs-spin {\n\tfrom {transform:rotate(0deg);}\n\tto {transform:rotate(360deg);}\n}\n\n/* Adding the class &quot;abcjs-large&quot; will make the control easier on a touch device. */\n.abcjs-large .abcjs-inline-audio {\n\theight: 52px;\n}\n.abcjs-large .abcjs-btn {\n\twidth: 56px;\n\theight: 52px;\n\tfont-size: 28px;\n\tpadding: 6px 8px;\n}\n.abcjs-large .abcjs-midi-progress-background {\n\theight: 20px;\n\tborder: 4px solid #cccccc;\n}\n.abcjs-large .abcjs-midi-progress-indicator {\n\theight: 28px;\n\ttop: -8px;\n\twidth: 40px;\n}\n.abcjs-large .abcjs-midi-clock {\n\tfont-size: 32px;\n\tmargin-right: 10px;\n\tmargin-left: 10px;\n\tmargin-top: -1px;\n}\n.abcjs-large .abcjs-midi-tempo {\n\tfont-size: 20px;\n\twidth: 50px;\n}\n.abcjs-large .abcjs-tempo-wrapper {\n\tfont-size: 20px;\n}\n\n.abcjs-css-warning {\n\tdisplay: none;\n}\n',document.head.appendChild(n)};function CursorControl(n){var t=this;t.onStart=function(){var t=document.querySelector(&quot;#&quot;+n+&quot; svg&quot;),e=document.createElementNS(&quot;http://www.w3.org/2000/svg&quot;,&quot;line&quot;);e.setAttribute(&quot;class&quot;,&quot;abcjs-cursor&quot;),e.setAttributeNS(null,&quot;x1&quot;,0),e.setAttributeNS(null,&quot;y1&quot;,0),e.setAttributeNS(null,&quot;x2&quot;,0),e.setAttributeNS(null,&quot;y2&quot;,0),t.appendChild(e)},t.beatSubdivisions=2,t.onEvent=function(t){if(!t.measureStart||null!==t.left){for(var e=document.querySelectorAll(&quot;#&quot;+n+&quot; svg .highlight&quot;),i=0;i&lt;e.length;i++)e[i].classList.remove(&quot;highlight&quot;);for(var a=0;a&lt;t.elements.length;a++)for(var o=t.elements[a],s=0;s&lt;o.length;s++)o[s].classList.add(&quot;highlight&quot;);var r=document.querySelector(&quot;#&quot;+n+&quot; svg .abcjs-cursor&quot;);r&amp;&amp;(r.setAttribute(&quot;x1&quot;,t.left-2),r.setAttribute(&quot;x2&quot;,t.left-2),r.setAttribute(&quot;y1&quot;,t.top),r.setAttribute(&quot;y2&quot;,t.top+t.height))}},t.onFinished=function(){for(var t=document.querySelectorAll(&quot;#&quot;+n+&quot; svg .highlight&quot;),e=0;e&lt;t.length;e++)t[e].classList.remove(&quot;highlight&quot;);var i=document.querySelector(&quot;#&quot;+n+&quot; svg .abcjs-cursor&quot;);i&amp;&amp;(i.setAttribute(&quot;x1&quot;,0),i.setAttribute(&quot;x2&quot;,0),i.setAttribute(&quot;y1&quot;,0),i.setAttribute(&quot;y2&quot;,0))}}function clickListener(n,t,e,i,a,o){var s=n.midiPitches;s&amp;&amp;ABCJS.synth.playEvent(s,n.midiGraceNotePitches,1e3).then((function(n){console.log(&quot;note played&quot;)})).catch((function(n){console.log(&quot;error playing note&quot;,n)}))}function redraw(n,t){const e=abcArr[n];objsArr[n]=ABCJS.renderAbc(`abcjs-notation-${n}`,e,{visualTranspose:t,responsive:&quot;resize&quot;,clickListener:clickListener}),synthArr.forEach((n=&gt;{n.pause()})),initSynth(n,objsArr[n],t)}function initSynth(n,t,e=0){var i=new CursorControl(`abcjs-notation-${n}`,null),a=new ABCJS.synth.SynthController,o=document.getElementById(`abcjs-audio-${n}`);a.load(o,i,{displayRestart:!0,displayPlay:!0,displayProgress:!0}),a.disable(!0),synthArr[n]=a,(new ABCJS.synth.CreateSynth).init({visualObj:t[0],options:{responsive:&quot;resize&quot;}}).then((()=&gt;{a&amp;&amp;a.setTune(t[0],!1,{midiTranspose:e}).catch((n=&gt;{console.warn(&quot;Audio problem:&quot;,n)}))})).catch((n=&gt;{console.warn(&quot;Audio problem:&quot;,n)}))}function changeTransposeValue(n,t=1){var e=document.querySelector(`#transpose-${n}`);t=parseInt(t);let i=parseInt(e.value);e.value=i+t,redraw(n,e.value)}document.addEventListener(&quot;DOMContentLoaded&quot;,onDomReady);&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 포스트에서는 &lt;b&gt;서브도미넌트 마이너(Subdominant Minor, SDm)&lt;/b&gt;와 그 대리 코드에 대해 살펴봅니다. 서브도미넌트 마이너는 같은 으뜸음의 단조에서 서브도미넌트인 IV를 차용한 코드로, 장조의 진행에 색채감과 자연스러운 긴장감을 더해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 C장조를 기준으로 Fm6, Fm7과 같은 IVm 계열뿐만 아니라 ♭VI, ♭II, II&amp;oslash;, ♭VII7 등 서로 다른 형태의 코드들이 어떻게 서브도미넌트 마이너의 기능을 대신할 수 있는지 살펴봅니다. 각 코드의 구성음과 자리바꿈, 내성의 움직임을 비교하면서 이들이 왜 같은 기능으로 묶일 수 있는지 확인하고, 실제 코드 진행에서 이러한 대리 코드가 어떻게 사용되는지도 예제를 통해 알아보겠습니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;서브도미넌트 마이너(Subdominant Minor, SDm)이란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-10 오전 1.53.14.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XV5X0/dJMcaiqLyT1/z4sbkYXJTFNQUijUaLnrCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XV5X0/dJMcaiqLyT1/z4sbkYXJTFNQUijUaLnrCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XV5X0/dJMcaiqLyT1/z4sbkYXJTFNQUijUaLnrCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXV5X0%2FdJMcaiqLyT1%2Fz4sbkYXJTFNQUijUaLnrCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475&quot; height=&quot;393&quot; data-filename=&quot;스크린샷 2026-08-10 오전 1.53.14.png&quot; data-origin-width=&quot;1148&quot; data-origin-height=&quot;950&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;code_1786293072670&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
T: 성자의 행진
C: 미국 민요
R: 보기 111
L: 1/4
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [1 2]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;G7&amp;quot;z [FGBe][FGBe][FGBd] | &amp;quot;C6&amp;quot;[EGAc]3 [EGAc] | &amp;quot;C7&amp;quot;[G_Bce]2 [Bceg]2 | &amp;quot;F6&amp;quot;[Acdg][Ac-d-f-]3 |
w: __ _ &amp;rarr; _ _ _ &amp;rarr;
&amp;quot;Fm6&amp;quot;[_Acdf]2 [Ace][Acdf] | &amp;quot;Em7&amp;quot;[Bdeg]2 &amp;quot;A7&amp;quot;[G=A^ce]2 | &amp;quot;Dm7&amp;quot;[DFA=c]2 &amp;quot;G7&amp;quot;[FGBd]2 | &amp;quot;C6&amp;quot;[EGAc]4 ||
w: ___ └─ ─┘ └─ ─┘
V:2 clef=bass
G,,2 B,,2 | C,2 G,,2| C,2 E,2 | F,2 C,2 | 
w:C:~V₇ _ I₆ _ I₇ _ IV₆
F,2 F,2 | E,2 A,,2 | D,2 G,,2 | C,4 ||
w:IVm₆ _ IIIm₇ VI₇ II₇ V₇ I₆ 
W: &amp;rarr; : 도미넌트 모션
W: └┘ : 투 파이브
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
T: 성자의 행진
C: 미국 민요
R: 보기 111
L: 1/4
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [1 2]
%%MIDI gchord mute
V:1 clef=treble
&quot;G7&quot;z [FGBe][FGBe][FGBd] | &quot;C6&quot;[EGAc]3 [EGAc] | &quot;C7&quot;[G_Bce]2 [Bceg]2 | &quot;F6&quot;[Acdg][Ac-d-f-]3 |
w: __ _ &amp;rarr; _ _ _ &amp;rarr;
&quot;Fm6&quot;[_Acdf]2 [Ace][Acdf] | &quot;Em7&quot;[Bdeg]2 &quot;A7&quot;[G=A^ce]2 | &quot;Dm7&quot;[DFA=c]2 &quot;G7&quot;[FGBd]2 | &quot;C6&quot;[EGAc]4 ||
w: ___ └─ ─┘ └─ ─┘
V:2 clef=bass
G,,2 B,,2 | C,2 G,,2| C,2 E,2 | F,2 C,2 | 
w:C:~V₇ _ I₆ _ I₇ _ IV₆
F,2 F,2 | E,2 A,,2 | D,2 G,,2 | C,4 ||
w:IVm₆ _ IIIm₇ VI₇ II₇ V₇ I₆ 
W: &amp;rarr; : 도미넌트 모션
W: └┘ : 투 파이브
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 악보에서 제 5 마디의 &lt;b&gt;Fm6&lt;/b&gt; 는 Key Cm 에서 IV를 차용하고 있으며 이것을 서브도미넌트 마이너 ( &lt;u&gt;&lt;b&gt;SDm&lt;/b&gt;&lt;/u&gt; 로 줄여씀 ) 라고 합니다. 마이너 코드에서 빌려왔기 때문에 &lt;u&gt;&lt;b&gt;'서브도미넌트(의) 마이너'&lt;/b&gt;&lt;/u&gt;라고 부르는 것입니다.&lt;/p&gt;
&lt;div id=&quot;code_1786293275549&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 112
L: 1/1
Q: 1/1=120
K: C
%%MIDI program 5
%%staves [1 2]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;^Key C&amp;quot;[CEG][DFA][EGB][FAc][GBd][Ace][Bdf] ||
&amp;quot;^Key Cm&amp;quot;[C_EG][DF_A][_EG_B][F_Ac][G=Bd][_Ac_e][_Bdf] ||
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 112
L: 1/1
Q: 1/1=120
K: C
%%MIDI program 5
%%staves [1 2]
%%MIDI gchord mute
V:1 clef=treble
&quot;^Key C&quot;[CEG][DFA][EGB][FAc][GBd][Ace][Bdf] ||
&quot;^Key Cm&quot;[C_EG][DF_A][_EG_B][F_Ac][G=Bd][_Ac_e][_Bdf] ||
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;서브도미넌트 마이너의 기능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브도미넌트 그 자체 (서브도미넌트 마이너 다음에 &lt;u&gt;토닉으로도, 도미넌트로도 진행&lt;/u&gt;)&lt;/li&gt;
&lt;li&gt;서브도미넌트 안에서의 코드 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;code_1786293315590&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 113
L: 1/8
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;Dm7&amp;quot;f2 ef &amp;quot;Fm6&amp;quot;d4 | &amp;quot;Em7&amp;quot;e2 de &amp;quot;Am7&amp;quot;c4 ||
V:2 clef=treble
A4 _A4 | G4 G4 ||
V:3 clef=bass
[D,C]4 [F,C]4 | [E,D]4 [A,E]4 ||
w: C:~IIm₇ IVm₆ IIIm₇ VIm₇
w: (S) (SDm) (T) (T)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 113
L: 1/8
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
V:1 clef=treble
&quot;Dm7&quot;f2 ef &quot;Fm6&quot;d4 | &quot;Em7&quot;e2 de &quot;Am7&quot;c4 ||
V:2 clef=treble
A4 _A4 | G4 G4 ||
V:3 clef=bass
[D,C]4 [F,C]4 | [E,D]4 [A,E]4 ||
w: C:~IIm₇ IVm₆ IIIm₇ VIm₇
w: (S) (SDm) (T) (T)
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;서브도미넌트&amp;nbsp;마이너의&amp;nbsp;대리&amp;nbsp;코드&lt;/b&gt;&lt;/h2&gt;
&lt;div id=&quot;code_1786293378841&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 114
L: 1/4
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;C/G&amp;quot;e3 c | &amp;quot;G7&amp;quot;B2 cd | &amp;quot;C&amp;quot;c4- | c z &amp;quot;DbM7&amp;quot;[_df_ac']2 | &amp;quot;CM7&amp;quot;[cegb]4 ||
V:2 clef=bass
z [G,CE] z [G,CE] | z [G,B,F] z [G,B,F] | z [G,CE] z [G,CE] | [G,CE] z [_A,_DF]2 | [G,CE]4 ||
V:3 clef=bass
G,, z G,, z | D,, z G,, z | C,, z G,, z | G,, z _D,,2 | C,,4 ||
w: I _ _ V₇ ___ I ___ _ ♭IIM₇ IM₇
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 114
L: 1/4
Q: 1/4=120
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;C/G&quot;e3 c | &quot;G7&quot;B2 cd | &quot;C&quot;c4- | c z &quot;DbM7&quot;[_df_ac']2 | &quot;CM7&quot;[cegb]4 ||
V:2 clef=bass
z [G,CE] z [G,CE] | z [G,B,F] z [G,B,F] | z [G,CE] z [G,CE] | [G,CE] z [_A,_DF]2 | [G,CE]4 ||
V:3 clef=bass
G,, z G,, z | D,, z G,, z | C,, z G,, z | G,, z _D,,2 | C,,4 ||
w: I _ _ V₇ ___ I ___ _ ♭IIM₇ IM₇
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;〈보기 115〉에서 D♭M7 의 기능?&lt;/b&gt; &lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D♭7 이라면 도미넌트로 기능합니다. (아래 블로그 포스트 링크 참조) &lt;br /&gt;그렇다면 &lt;b&gt;DbM7&lt;/b&gt;인 경우는 무엇일까요?&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1786293467065&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;도미넌트 세븐스(Dominant 7th)의 대리 코드 [경음악편곡법, 재즈화성학]&quot; data-og-description=&quot;도미넌트 세븐스의 대리 코드에 대해 설명하겠습니다. 기본적으로 코드 진행은 토닉, 서브도미넌트, 도미넌트의 변화입니다. 대리는 이러한 변화의 일부입니다. 요약V7의 대리 코드는 VIIm7(-5), &quot; data-og-host=&quot;infoarmory.tistory.com&quot; data-og-source-url=&quot;https://infoarmory.tistory.com/299&quot; data-og-url=&quot;https://infoarmory.tistory.com/299&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWxH8P/dJMb9iIWhnm/PpwZBJInOXv7Dj8sbtvBZ1/img.png?width=800&amp;amp;height=596&amp;amp;face=0_0_800_596,https://scrap.kakaocdn.net/dn/e5cQo/dJMb9b37te3/T6SpvZGjyIgVLdzvFOEgDk/img.png?width=800&amp;amp;height=596&amp;amp;face=0_0_800_596&quot;&gt;&lt;a href=&quot;https://infoarmory.tistory.com/299&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://infoarmory.tistory.com/299&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWxH8P/dJMb9iIWhnm/PpwZBJInOXv7Dj8sbtvBZ1/img.png?width=800&amp;amp;height=596&amp;amp;face=0_0_800_596,https://scrap.kakaocdn.net/dn/e5cQo/dJMb9b37te3/T6SpvZGjyIgVLdzvFOEgDk/img.png?width=800&amp;amp;height=596&amp;amp;face=0_0_800_596');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;도미넌트 세븐스(Dominant 7th)의 대리 코드 [경음악편곡법, 재즈화성학]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;도미넌트 세븐스의 대리 코드에 대해 설명하겠습니다. 기본적으로 코드 진행은 토닉, 서브도미넌트, 도미넌트의 변화입니다. 대리는 이러한 변화의 일부입니다. 요약V7의 대리 코드는 VIIm7(-5),&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;infoarmory.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fm의 내성이 &lt;u&gt;'도', '레♭', '레', '미♭'&lt;/u&gt; 로 Fm의 기능 안에서 움직이고 있습니다. 이 때 만들어지는 코드가 서브도미넌트 마이너의 대리코드 중 하나입니다.&lt;/p&gt;
&lt;div id=&quot;code_1786293513059&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 115
L: 1/4
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
V:1 clef=treble
[F_Ac]4 | [=EGc]4 ||
V:2 clef=treble
&amp;quot;Fm&amp;quot;C &amp;quot;DbM7&amp;quot;_D &amp;quot;Fm6&amp;quot;=D &amp;quot;Fm7&amp;quot;_E |
w: _ ⓐ ⓑ ⓒ
V:3 clef=bass
F,4 | C,4 ||
w: C:~IVm  I
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 115
L: 1/4
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
V:1 clef=treble
[F_Ac]4 | [=EGc]4 ||
V:2 clef=treble
&quot;Fm&quot;C &quot;DbM7&quot;_D &quot;Fm6&quot;=D &quot;Fm7&quot;_E |
w: _ ⓐ ⓑ ⓒ
V:3 clef=bass
F,4 | C,4 ||
w: C:~IVm  I
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;서브 도미넌트 마이너의 대리 코드의 종류 (7가지)&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;IVm6, IVm7, ♭VI6, ♭VIM7, ♭IIM7, II&amp;oslash;, ♭VII7&lt;br /&gt;(키 C 에서 Fm6, Fm7, A♭6, A♭M7, D♭M7, D0, B♭7)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;IVm 계열&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(A) &lt;b&gt;IVm6&lt;/b&gt;: IVm에 장 6도음을 더한 것 (〈보기&amp;nbsp;115〉의 제 3박 ⓑ)&amp;nbsp;&lt;br /&gt;(B) &lt;b&gt;IVm7&lt;/b&gt;: IVm에 단 7도음을 더한 것 (〈보기 115〉의 제 4박 ⓒ)&lt;/p&gt;
&lt;div id=&quot;code_1786293660826&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 116
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&amp;quot;Fm&amp;quot;[F_Ac] || &amp;quot;Fm6&amp;quot;&amp;quot;^(A)&amp;quot;[F_Acd] || &amp;quot;Fm7&amp;quot;&amp;quot;^(B)&amp;quot;[F_Ac_e] ||
w: C:~IVm IVm6 IVm₇
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 116
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&quot;Fm&quot;[F_Ac] || &quot;Fm6&quot;&quot;^(A)&quot;[F_Acd] || &quot;Fm7&quot;&quot;^(B)&quot;[F_Ac_e] ||
w: C:~IVm IVm6 IVm₇
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;♭VI 계열&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(C) &lt;b&gt;♭VI6&lt;/b&gt;: 〈보기&amp;nbsp;115〉의 C의 IVm7을 자리바꿈한 것&lt;br /&gt;(D) &lt;u&gt;&lt;b&gt;♭VIM7&lt;/b&gt;&lt;/u&gt;: (C)의 ♭VI6의 메이저 세븐스 형태&lt;/p&gt;
&lt;div id=&quot;code_1786293732374&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 117
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&amp;quot;Ab6&amp;quot;&amp;quot;^(C)&amp;quot;[_Ac_ef] || &amp;quot;AbM7&amp;quot;&amp;quot;^(D)&amp;quot;[_Ac_eg] ||
w: C:~♭VI₆ ♭VIM₇
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 117
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&quot;Ab6&quot;&quot;^(C)&quot;[_Ac_ef] || &quot;AbM7&quot;&quot;^(D)&quot;[_Ac_eg] ||
w: C:~♭VI₆ ♭VIM₇
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(♭)II 계열&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(E) &lt;b&gt;&lt;u&gt;♭IIM7&lt;/u&gt;:&lt;/b&gt; IVm에 단 6도음을 더한 것 (〈보기&amp;nbsp;115〉의 제 2박 ⓐ)&lt;br /&gt;(F) &lt;b&gt;II&amp;oslash;&lt;/b&gt;: 〈보기&amp;nbsp;115〉의 ⓑ IVm6을 자리바꿈한 것&lt;/p&gt;
&lt;div id=&quot;code_1786293761481&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 118-1
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&amp;quot;DbM7&amp;quot;&amp;quot;^(E)&amp;quot;[_DF_Ac] || &amp;quot;D07&amp;quot;&amp;quot;^(F)&amp;quot;[DF_Ac] ||
w: C:~♭IIM₇ II&amp;oslash;
W: &amp;oslash;: m7(-5)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 118-1
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2) 3]
%%MIDI gchord mute
%%₆ ₇
V:1 clef=treble
&quot;DbM7&quot;&quot;^(E)&quot;[_DF_Ac] || &quot;D07&quot;&quot;^(F)&quot;[DF_Ac] ||
w: C:~♭IIM₇ II&amp;oslash;
W: &amp;oslash;: m7(-5)
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;♭VII 계열&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(G) &lt;u&gt;&lt;b&gt;♭VII7&lt;/b&gt;&lt;/u&gt;: (F)의 II&amp;oslash;을 ♭VII 7(9)의 밑음 생략형으로 생각하여 가까운 코드로 간주&lt;/p&gt;
&lt;div id=&quot;code_1786293879993&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 118-2
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2 3)]
%%MIDI gchord mute
V:1 clef=treble
[DF_Ac] | !mark!c || 
w: C:~II&amp;oslash; 
V:2 clef=treble
&amp;quot;D07&amp;quot;&amp;quot;^(G)&amp;quot;x | &amp;quot;Bb7(9)&amp;quot;[DF_A]
w: _ ♭VIIM₇⁽⁹⁾ 
V:3 clef=treble
x | !mark!_B,
W: ♭VIIM₇⁽⁹⁾ 코드에 밑음이 생략되면 D&amp;oslash;으로 볼 수 있다.
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 118-2
L: 1/1
Q: 1/4=100
K: C
%%MIDI program 5
%%staves [(1 2 3)]
%%MIDI gchord mute
V:1 clef=treble
[DF_Ac] | !mark!c || 
w: C:~II&amp;oslash; 
V:2 clef=treble
&quot;D07&quot;&quot;^(G)&quot;x | &quot;Bb7(9)&quot;[DF_A]
w: _ ♭VIIM₇⁽⁹⁾ 
V:3 clef=treble
x | !mark!_B,
W: ♭VIIM₇⁽⁹⁾ 코드에 밑음이 생략되면 D&amp;oslash;으로 볼 수 있다.
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/h2&gt;
&lt;div id=&quot;code_1786293966064&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 119
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot;e4 &amp;quot;Fm6&amp;quot;gfed | &amp;quot;CM7&amp;quot;e8 ||
V:2 clef=bass
[G,B,CE]4 [_A,CDF]4 | [G,B,CE]8 ||
V:3 clef=bass
C,4 F,,4 | C,8 ||
w: C:~IM₇ IVm₆ IM₇
w: (T) (SDm) (T)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 119
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot;e4 &quot;Fm6&quot;gfed | &quot;CM7&quot;e8 ||
V:2 clef=bass
[G,B,CE]4 [_A,CDF]4 | [G,B,CE]8 ||
V:3 clef=bass
C,4 F,,4 | C,8 ||
w: C:~IM₇ IVm₆ IM₇
w: (T) (SDm) (T)
&lt;/code&gt;&lt;/div&gt;
&lt;div id=&quot;code_1786293994067&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 120
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot;zceg &amp;quot;Fm7&amp;quot;_b_agf | &amp;quot;CM7&amp;quot;g2 de-e4 ||
V:2 clef=bass
[G,B,CE]4 [_A,C_EF]4 | [G,B,C=E]8 ||
V:3 clef=bass
C,4 F,,4 | C,8 ||
w: C:~IM₇ IVm₇ IM₇
w: (T) (SDm) (T)
&amp;lt;/code&amp;gt;
&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 120
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot;zceg &quot;Fm7&quot;_b_agf | &quot;CM7&quot;g2 de-e4 ||
V:2 clef=bass
[G,B,CE]4 [_A,C_EF]4 | [G,B,C=E]8 ||
V:3 clef=bass
C,4 F,,4 | C,8 ||
w: C:~IM₇ IVm₇ IM₇
w: (T) (SDm) (T)
&lt;/code&gt;&lt;/div&gt;
&lt;div id=&quot;code_1786294002152&quot; data-ke-type=&quot;html&quot; data-source=&quot;
&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 121
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot;zgde &amp;quot;Ab6&amp;quot;cG_B_A | &amp;quot;Dm7&amp;quot;G4-&amp;quot;G7&amp;quot;G4||
w: __ ______ └─ ─┘
V:2 clef=bass
[G,B,CE]4 [F,_A,C_E]4 | [F,=A,CD]4 [F,G,B,D]4 ||
V:3 clef=bass
C,4 _A,,4 | D,,4 G,,4 ||
w: C:~IM₇ ♭VIm₆ IIm₇ V₇
w: (T) sub(SDm) (S) (D)
&amp;lt;/code&amp;gt;
&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 121
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot;zgde &quot;Ab6&quot;cG_B_A | &quot;Dm7&quot;G4-&quot;G7&quot;G4||
w: __ ______ └─ ─┘
V:2 clef=bass
[G,B,CE]4 [F,_A,C_E]4 | [F,=A,CD]4 [F,G,B,D]4 ||
V:3 clef=bass
C,4 _A,,4 | D,,4 G,,4 ||
w: C:~IM₇ ♭VIm₆ IIm₇ V₇
w: (T) sub(SDm) (S) (D)
&lt;/code&gt;&lt;/div&gt;
&lt;div id=&quot;code_1786294008858&quot; data-ke-type=&quot;html&quot; data-source=&quot;
&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 122
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot;zgde &amp;quot;AbM7&amp;quot;cG_&amp;quot;DbM7&amp;quot;_B_A | &amp;quot;CM7&amp;quot;G8||
V:2 clef=bass
[G,B,CE]4 [_A,C_EG]2 [A,C_DF]2 | [G,B,CE]8 ||
V:3 clef=bass
C,4 _A,,2 _D,,2 | C,,8 ||
w: C:~IM₇ ♭VIm₆ IIm₇ V₇
w: (T) sub(SDm) sub(SDm) (T)
&amp;lt;/code&amp;gt;
&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 122
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot;zgde &quot;AbM7&quot;cG_&quot;DbM7&quot;_B_A | &quot;CM7&quot;G8||
V:2 clef=bass
[G,B,CE]4 [_A,C_EG]2 [A,C_DF]2 | [G,B,CE]8 ||
V:3 clef=bass
C,4 _A,,2 _D,,2 | C,,8 ||
w: C:~IM₇ ♭VIm₆ IIm₇ V₇
w: (T) sub(SDm) sub(SDm) (T)
&lt;/code&gt;&lt;/div&gt;
&lt;div id=&quot;code_1786294019042&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 123
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot;zgfe &amp;quot;Am7&amp;quot;dcBc | &amp;quot;D07&amp;quot;e2 d2-&amp;quot;G7&amp;quot;d4 ||
V:2 clef=bass
[G,B,CE]4 [A,CEG]4 | [_A,CDF]4 [G,B,DF]4 ||
V:3 clef=bass
C,4 A,,4 | D,,4 G,,4 ||
w: C:~IM₇ VIm₇ II&amp;oslash; V₇
w: (T) (T) sub(SDm) (T)
&amp;lt;/code&amp;gt;
&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 123
L: 1/8
Q: 1/4=100
K: C
M: C
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot;zgfe &quot;Am7&quot;dcBc | &quot;D07&quot;e2 d2-&quot;G7&quot;d4 ||
V:2 clef=bass
[G,B,CE]4 [A,CEG]4 | [_A,CDF]4 [G,B,DF]4 ||
V:3 clef=bass
C,4 A,,4 | D,,4 G,,4 ||
w: C:~IM₇ VIm₇ II&amp;oslash; V₇
w: (T) (T) sub(SDm) (T)
&lt;/code&gt;&lt;/div&gt;
&lt;div id=&quot;code_1786294026642&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 124
L: 1/4
Q: 1/4=100
K: C
M: 3/4
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&amp;quot;CM7&amp;quot; efg | &amp;quot;Bb7&amp;quot;_agf | &amp;quot;Em7&amp;quot;g3 | &amp;quot;Am7&amp;quot;c3 ||
V:2 clef=bass
[L:3/4][G,B,CE] | [_A,_B,DF] | [G,B,DE] | [G,A,CE] ||
V:3 clef=bass
C, | _B,, | E,, | A,, ||
w: C:~IM₇ ♭VII₇ IIIm₇ VIm₇
w: (T) sub(SDm) (T) (T)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 124
L: 1/4
Q: 1/4=100
K: C
M: 3/4
%%MIDI program 5
%%staves [1 (2 3)]
%%MIDI gchord mute
V:1 clef=treble
&quot;CM7&quot; efg | &quot;Bb7&quot;_agf | &quot;Em7&quot;g3 | &quot;Am7&quot;c3 ||
V:2 clef=bass
[L:3/4][G,B,CE] | [_A,_B,DF] | [G,B,DE] | [G,A,CE] ||
V:3 clef=bass
C, | _B,, | E,, | A,, ||
w: C:~IM₇ ♭VII₇ IIIm₇ VIm₇
w: (T) sub(SDm) (T) (T)
&lt;/code&gt;&lt;/div&gt;</description>
      <category>공부/재즈화성학(경음악편곡법)</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/300</guid>
      <comments>https://infoarmory.tistory.com/300#entry300comment</comments>
      <pubDate>Mon, 10 Aug 2026 01:53:58 +0900</pubDate>
    </item>
    <item>
      <title>도미넌트 세븐스(Dominant 7th)의 대리 코드 [경음악편곡법, 재즈화성학]</title>
      <link>https://infoarmory.tistory.com/299</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;도미넌트 세븐스의 대리 코드에 대해 설명하겠습니다. 기본적으로 코드 진행은 토닉, 서브도미넌트, 도미넌트의 변화입니다. 대리는 이러한 변화의 일부입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;요약&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;V7의 대리 코드는 &lt;b&gt;VIIm7(-5)&lt;/b&gt;, &lt;b&gt;♭II7&lt;/b&gt; 이 있습니다. 세컨더리 도미넌트 7th의 대리 코드는 &lt;b&gt;증4도(감5도)&lt;/b&gt; 관계의 코드가 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1785411245630&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://cdn.jsdelivr.net/npm/abcjs@6.5.2/dist/abcjs-basic-min.min.js&amp;quot; id=&amp;quot;abcjs-plugin-js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;var objsArr=[],abcArr=[],synthArr=[];const onDomReady=()=&amp;gt;{document.querySelectorAll([&amp;quot;code.language-abc&amp;quot;,&amp;quot;code.abc&amp;quot;,&amp;quot;code.language-abcjs&amp;quot;,&amp;quot;pre &amp;gt; code.language-abc&amp;quot;].join(&amp;quot;, &amp;quot;)).forEach(((n,t)=&amp;gt;{const e=n.textContent,i=n.parentElement,a=&amp;#96;abcjs-notation-${t}&amp;#96;,o=&amp;#96;abcjs-audio-${t}&amp;#96;,s=document.createElement(&amp;quot;div&amp;quot;);s.innerHTML=&amp;#96;\n      &amp;lt;div id=&amp;quot;${a}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;\n      &amp;lt;div id=&amp;quot;${o}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;\n    &amp;#96;,i.replaceWith(s);var r=[a],c={responsive:&amp;quot;resize&amp;quot;,clickListener:clickListener},l=e,d=ABCJS.renderAbc(r,l,c);objsArr[t]=d,abcArr[t]=e,initSynth(t,d)})),document.querySelectorAll(&amp;quot;.abcjs-css-warning&amp;quot;).forEach((n=&amp;gt;n.remove())),document.querySelectorAll(&amp;quot;div.abcjs-inline-audio&amp;quot;).forEach(((n,t)=&amp;gt;{const e=n.parentElement;e&amp;amp;&amp;amp;e.insertAdjacentHTML(&amp;quot;afterend&amp;quot;,&amp;#96;&amp;lt;label&amp;gt;&amp;lt;span style=&amp;quot;font-size: 10px; font-weight: bold;&amp;quot;&amp;gt;Transpose:&amp;lt;/span&amp;gt; \n            &amp;lt;input id=&amp;quot;transpose-${t}&amp;quot; \n            data-idx=&amp;quot;${t}&amp;quot; \n            class=&amp;quot;transpose-half-steps&amp;quot; \n            type=&amp;quot;number&amp;quot; \n            onchange=&amp;quot;redraw(${t}, this.value);&amp;quot;\n            min=&amp;quot;-12&amp;quot; \n            max=&amp;quot;12&amp;quot; \n            step=&amp;quot;1&amp;quot; \n            value=&amp;quot;0&amp;quot;&amp;gt;\n            &amp;lt;button style=&amp;quot;width: 30px;&amp;quot; onclick=&amp;quot;changeTransposeValue(${t}, -1);&amp;quot;&amp;gt;-&amp;lt;/button&amp;gt;\n            &amp;lt;button style=&amp;quot;width: 30px;&amp;quot; onclick=&amp;quot;changeTransposeValue(${t}, 1);&amp;quot;&amp;gt;+&amp;lt;/button&amp;gt;\n          &amp;lt;/label&amp;gt;&amp;#96;)}));const n=document.createElement(&amp;quot;style&amp;quot;);n.type=&amp;quot;text/css&amp;quot;,n.textContent='\n/* Some basic CSS to make the Audio controls in abcjs presentable. */\n\n.abcjs-inline-audio {\n\theight: 26px;\n\tpadding: 0 5px;\n\tborder-radius: 3px;\n\tbackground-color: #424242;\n\tdisplay: flex;\n\talign-items: center;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio.abcjs-disabled {\n\topacity: 0.5;\n}\n\n.abcjs-inline-audio .abcjs-btn {\n\tdisplay: block;\n\twidth: 28px;\n\theight: 34px;\n\tmargin-right: 2px;\n\tpadding: 7px 4px;\n\n\tbackground: none !important;\n\tborder: 1px solid transparent;\n\tbox-sizing: border-box;\n\tline-height: 1;\n}\n\n.abcjs-btn g {\n\tfill: #f4f4f4;\n\tstroke: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-btn:hover g {\n\tfill: #cccccc;\n\tstroke: #cccccc;\n}\n\n.abcjs-inline-audio .abcjs-midi-selection.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-reset.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg {\n\tdisplay: block;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-background {\n\tbackground-color: #424242;\n\theight: 10px;\n\tborder-radius: 5px;\n\tborder: 2px solid #cccccc;\n\tmargin: 0 8px 0 15px;\n\tposition: relative;\n\tflex: 1;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-indicator {\n\twidth: 20px;\n\tmargin-left: -10px; /* half of the width */\n\theight: 14px;\n\tbackground-color: #f4f4f4;\n\tposition: absolute;\n\tdisplay: inline-block;\n\tborder-radius: 6px;\n\ttop: -4px;\n\tleft: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-clock {\n\tmargin-left: 4px;\n\tmargin-top: 1px;\n\tmargin-right: 2px;\n\tdisplay: inline-block;\n\tfont-family: sans-serif;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\tcolor: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-tempo-wrapper {\n\tfont-size: 10px;\n\tcolor: #f4f4f4;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.abcjs-inline-audio .abcjs-midi-tempo {\n\tborder-radius: 2px;\n\tborder: none;\n\tmargin: 0 2px 0 4px;\n\twidth: 42px;\n\tpadding-left: 2px;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-loading .abcjs-loading-svg {\n\tdisplay: inherit;\n}\n\n.abcjs-inline-audio .abcjs-loading {\n\toutline: none;\n\tanimation-name: abcjs-spin;\n\tanimation-duration: 1s;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n\n}\n.abcjs-inline-audio .abcjs-loading-svg circle {\n\tstroke: #f4f4f4;\n}\n\n@keyframes abcjs-spin {\n\tfrom {transform:rotate(0deg);}\n\tto {transform:rotate(360deg);}\n}\n\n/* Adding the class &amp;quot;abcjs-large&amp;quot; will make the control easier on a touch device. */\n.abcjs-large .abcjs-inline-audio {\n\theight: 52px;\n}\n.abcjs-large .abcjs-btn {\n\twidth: 56px;\n\theight: 52px;\n\tfont-size: 28px;\n\tpadding: 6px 8px;\n}\n.abcjs-large .abcjs-midi-progress-background {\n\theight: 20px;\n\tborder: 4px solid #cccccc;\n}\n.abcjs-large .abcjs-midi-progress-indicator {\n\theight: 28px;\n\ttop: -8px;\n\twidth: 40px;\n}\n.abcjs-large .abcjs-midi-clock {\n\tfont-size: 32px;\n\tmargin-right: 10px;\n\tmargin-left: 10px;\n\tmargin-top: -1px;\n}\n.abcjs-large .abcjs-midi-tempo {\n\tfont-size: 20px;\n\twidth: 50px;\n}\n.abcjs-large .abcjs-tempo-wrapper {\n\tfont-size: 20px;\n}\n\n.abcjs-css-warning {\n\tdisplay: none;\n}\n',document.head.appendChild(n)};function CursorControl(n){var t=this;t.onStart=function(){var t=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg&amp;quot;),e=document.createElementNS(&amp;quot;http://www.w3.org/2000/svg&amp;quot;,&amp;quot;line&amp;quot;);e.setAttribute(&amp;quot;class&amp;quot;,&amp;quot;abcjs-cursor&amp;quot;),e.setAttributeNS(null,&amp;quot;x1&amp;quot;,0),e.setAttributeNS(null,&amp;quot;y1&amp;quot;,0),e.setAttributeNS(null,&amp;quot;x2&amp;quot;,0),e.setAttributeNS(null,&amp;quot;y2&amp;quot;,0),t.appendChild(e)},t.beatSubdivisions=2,t.onEvent=function(t){if(!t.measureStart||null!==t.left){for(var e=document.querySelectorAll(&amp;quot;#&amp;quot;+n+&amp;quot; svg .highlight&amp;quot;),i=0;i&amp;lt;e.length;i++)e[i].classList.remove(&amp;quot;highlight&amp;quot;);for(var a=0;a&amp;lt;t.elements.length;a++)for(var o=t.elements[a],s=0;s&amp;lt;o.length;s++)o[s].classList.add(&amp;quot;highlight&amp;quot;);var r=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg .abcjs-cursor&amp;quot;);r&amp;amp;&amp;amp;(r.setAttribute(&amp;quot;x1&amp;quot;,t.left-2),r.setAttribute(&amp;quot;x2&amp;quot;,t.left-2),r.setAttribute(&amp;quot;y1&amp;quot;,t.top),r.setAttribute(&amp;quot;y2&amp;quot;,t.top+t.height))}},t.onFinished=function(){for(var t=document.querySelectorAll(&amp;quot;#&amp;quot;+n+&amp;quot; svg .highlight&amp;quot;),e=0;e&amp;lt;t.length;e++)t[e].classList.remove(&amp;quot;highlight&amp;quot;);var i=document.querySelector(&amp;quot;#&amp;quot;+n+&amp;quot; svg .abcjs-cursor&amp;quot;);i&amp;amp;&amp;amp;(i.setAttribute(&amp;quot;x1&amp;quot;,0),i.setAttribute(&amp;quot;x2&amp;quot;,0),i.setAttribute(&amp;quot;y1&amp;quot;,0),i.setAttribute(&amp;quot;y2&amp;quot;,0))}}function clickListener(n,t,e,i,a,o){var s=n.midiPitches;s&amp;amp;&amp;amp;ABCJS.synth.playEvent(s,n.midiGraceNotePitches,1e3).then((function(n){console.log(&amp;quot;note played&amp;quot;)})).catch((function(n){console.log(&amp;quot;error playing note&amp;quot;,n)}))}function redraw(n,t){const e=abcArr[n];objsArr[n]=ABCJS.renderAbc(&amp;#96;abcjs-notation-${n}&amp;#96;,e,{visualTranspose:t,responsive:&amp;quot;resize&amp;quot;,clickListener:clickListener}),synthArr.forEach((n=&amp;gt;{n.pause()})),initSynth(n,objsArr[n],t)}function initSynth(n,t,e=0){var i=new CursorControl(&amp;#96;abcjs-notation-${n}&amp;#96;,null),a=new ABCJS.synth.SynthController,o=document.getElementById(&amp;#96;abcjs-audio-${n}&amp;#96;);a.load(o,i,{displayRestart:!0,displayPlay:!0,displayProgress:!0}),a.disable(!0),synthArr[n]=a,(new ABCJS.synth.CreateSynth).init({visualObj:t[0],options:{responsive:&amp;quot;resize&amp;quot;}}).then((()=&amp;gt;{a&amp;amp;&amp;amp;a.setTune(t[0],!1,{midiTranspose:e}).catch((n=&amp;gt;{console.warn(&amp;quot;Audio problem:&amp;quot;,n)}))})).catch((n=&amp;gt;{console.warn(&amp;quot;Audio problem:&amp;quot;,n)}))}function changeTransposeValue(n,t=1){var e=document.querySelector(&amp;#96;#transpose-${n}&amp;#96;);t=parseInt(t);let i=parseInt(e.value);e.value=i+t,redraw(n,e.value)}document.addEventListener(&amp;quot;DOMContentLoaded&amp;quot;,onDomReady);&amp;lt;/script&amp;gt;&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.jsdelivr.net/npm/abcjs@6.5.2/dist/abcjs-basic-min.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;var objsArr=[],abcArr=[],synthArr=[];const onDomReady=()=&gt;{document.querySelectorAll([&quot;code.language-abc&quot;,&quot;code.abc&quot;,&quot;code.language-abcjs&quot;,&quot;pre &gt; code.language-abc&quot;].join(&quot;, &quot;)).forEach(((n,t)=&gt;{const e=n.textContent,i=n.parentElement,a=`abcjs-notation-${t}`,o=`abcjs-audio-${t}`,s=document.createElement(&quot;div&quot;);s.innerHTML=`\n      &lt;div id=&quot;${a}&quot;&gt;&lt;/div&gt;\n      &lt;div id=&quot;${o}&quot;&gt;&lt;/div&gt;\n    `,i.replaceWith(s);var r=[a],c={responsive:&quot;resize&quot;,clickListener:clickListener},l=e,d=ABCJS.renderAbc(r,l,c);objsArr[t]=d,abcArr[t]=e,initSynth(t,d)})),document.querySelectorAll(&quot;.abcjs-css-warning&quot;).forEach((n=&gt;n.remove())),document.querySelectorAll(&quot;div.abcjs-inline-audio&quot;).forEach(((n,t)=&gt;{const e=n.parentElement;e&amp;&amp;e.insertAdjacentHTML(&quot;afterend&quot;,`&lt;label&gt;&lt;span style=&quot;font-size: 10px; font-weight: bold;&quot;&gt;Transpose:&lt;/span&gt; \n            &lt;input id=&quot;transpose-${t}&quot; \n            data-idx=&quot;${t}&quot; \n            class=&quot;transpose-half-steps&quot; \n            type=&quot;number&quot; \n            onchange=&quot;redraw(${t}, this.value);&quot;\n            min=&quot;-12&quot; \n            max=&quot;12&quot; \n            step=&quot;1&quot; \n            value=&quot;0&quot;&gt;\n            &lt;button style=&quot;width: 30px;&quot; onclick=&quot;changeTransposeValue(${t}, -1);&quot;&gt;-&lt;/button&gt;\n            &lt;button style=&quot;width: 30px;&quot; onclick=&quot;changeTransposeValue(${t}, 1);&quot;&gt;+&lt;/button&gt;\n          &lt;/label&gt;`)}));const n=document.createElement(&quot;style&quot;);n.type=&quot;text/css&quot;,n.textContent='\n/* Some basic CSS to make the Audio controls in abcjs presentable. */\n\n.abcjs-inline-audio {\n\theight: 26px;\n\tpadding: 0 5px;\n\tborder-radius: 3px;\n\tbackground-color: #424242;\n\tdisplay: flex;\n\talign-items: center;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio.abcjs-disabled {\n\topacity: 0.5;\n}\n\n.abcjs-inline-audio .abcjs-btn {\n\tdisplay: block;\n\twidth: 28px;\n\theight: 34px;\n\tmargin-right: 2px;\n\tpadding: 7px 4px;\n\n\tbackground: none !important;\n\tborder: 1px solid transparent;\n\tbox-sizing: border-box;\n\tline-height: 1;\n}\n\n.abcjs-btn g {\n\tfill: #f4f4f4;\n\tstroke: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-btn:hover g {\n\tfill: #cccccc;\n\tstroke: #cccccc;\n}\n\n.abcjs-inline-audio .abcjs-midi-selection.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-loop.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-reset.abcjs-pushed {\n\tborder: 1px solid #cccccc;\n\tbackground-color: #666666;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-pause-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start .abcjs-loading-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-loading .abcjs-play-svg {\n\tdisplay: none;\n}\n\n.abcjs-inline-audio .abcjs-midi-start.abcjs-pushed .abcjs-pause-svg {\n\tdisplay: block;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-background {\n\tbackground-color: #424242;\n\theight: 10px;\n\tborder-radius: 5px;\n\tborder: 2px solid #cccccc;\n\tmargin: 0 8px 0 15px;\n\tposition: relative;\n\tflex: 1;\n\tpadding: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-progress-indicator {\n\twidth: 20px;\n\tmargin-left: -10px; /* half of the width */\n\theight: 14px;\n\tbackground-color: #f4f4f4;\n\tposition: absolute;\n\tdisplay: inline-block;\n\tborder-radius: 6px;\n\ttop: -4px;\n\tleft: 0;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-midi-clock {\n\tmargin-left: 4px;\n\tmargin-top: 1px;\n\tmargin-right: 2px;\n\tdisplay: inline-block;\n\tfont-family: sans-serif;\n\tfont-size: 16px;\n\tbox-sizing: border-box;\n\tcolor: #f4f4f4;\n}\n\n.abcjs-inline-audio .abcjs-tempo-wrapper {\n\tfont-size: 10px;\n\tcolor: #f4f4f4;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.abcjs-inline-audio .abcjs-midi-tempo {\n\tborder-radius: 2px;\n\tborder: none;\n\tmargin: 0 2px 0 4px;\n\twidth: 42px;\n\tpadding-left: 2px;\n\tbox-sizing: border-box;\n}\n\n.abcjs-inline-audio .abcjs-loading .abcjs-loading-svg {\n\tdisplay: inherit;\n}\n\n.abcjs-inline-audio .abcjs-loading {\n\toutline: none;\n\tanimation-name: abcjs-spin;\n\tanimation-duration: 1s;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n\n}\n.abcjs-inline-audio .abcjs-loading-svg circle {\n\tstroke: #f4f4f4;\n}\n\n@keyframes abcjs-spin {\n\tfrom {transform:rotate(0deg);}\n\tto {transform:rotate(360deg);}\n}\n\n/* Adding the class &quot;abcjs-large&quot; will make the control easier on a touch device. */\n.abcjs-large .abcjs-inline-audio {\n\theight: 52px;\n}\n.abcjs-large .abcjs-btn {\n\twidth: 56px;\n\theight: 52px;\n\tfont-size: 28px;\n\tpadding: 6px 8px;\n}\n.abcjs-large .abcjs-midi-progress-background {\n\theight: 20px;\n\tborder: 4px solid #cccccc;\n}\n.abcjs-large .abcjs-midi-progress-indicator {\n\theight: 28px;\n\ttop: -8px;\n\twidth: 40px;\n}\n.abcjs-large .abcjs-midi-clock {\n\tfont-size: 32px;\n\tmargin-right: 10px;\n\tmargin-left: 10px;\n\tmargin-top: -1px;\n}\n.abcjs-large .abcjs-midi-tempo {\n\tfont-size: 20px;\n\twidth: 50px;\n}\n.abcjs-large .abcjs-tempo-wrapper {\n\tfont-size: 20px;\n}\n\n.abcjs-css-warning {\n\tdisplay: none;\n}\n',document.head.appendChild(n)};function CursorControl(n){var t=this;t.onStart=function(){var t=document.querySelector(&quot;#&quot;+n+&quot; svg&quot;),e=document.createElementNS(&quot;http://www.w3.org/2000/svg&quot;,&quot;line&quot;);e.setAttribute(&quot;class&quot;,&quot;abcjs-cursor&quot;),e.setAttributeNS(null,&quot;x1&quot;,0),e.setAttributeNS(null,&quot;y1&quot;,0),e.setAttributeNS(null,&quot;x2&quot;,0),e.setAttributeNS(null,&quot;y2&quot;,0),t.appendChild(e)},t.beatSubdivisions=2,t.onEvent=function(t){if(!t.measureStart||null!==t.left){for(var e=document.querySelectorAll(&quot;#&quot;+n+&quot; svg .highlight&quot;),i=0;i&lt;e.length;i++)e[i].classList.remove(&quot;highlight&quot;);for(var a=0;a&lt;t.elements.length;a++)for(var o=t.elements[a],s=0;s&lt;o.length;s++)o[s].classList.add(&quot;highlight&quot;);var r=document.querySelector(&quot;#&quot;+n+&quot; svg .abcjs-cursor&quot;);r&amp;&amp;(r.setAttribute(&quot;x1&quot;,t.left-2),r.setAttribute(&quot;x2&quot;,t.left-2),r.setAttribute(&quot;y1&quot;,t.top),r.setAttribute(&quot;y2&quot;,t.top+t.height))}},t.onFinished=function(){for(var t=document.querySelectorAll(&quot;#&quot;+n+&quot; svg .highlight&quot;),e=0;e&lt;t.length;e++)t[e].classList.remove(&quot;highlight&quot;);var i=document.querySelector(&quot;#&quot;+n+&quot; svg .abcjs-cursor&quot;);i&amp;&amp;(i.setAttribute(&quot;x1&quot;,0),i.setAttribute(&quot;x2&quot;,0),i.setAttribute(&quot;y1&quot;,0),i.setAttribute(&quot;y2&quot;,0))}}function clickListener(n,t,e,i,a,o){var s=n.midiPitches;s&amp;&amp;ABCJS.synth.playEvent(s,n.midiGraceNotePitches,1e3).then((function(n){console.log(&quot;note played&quot;)})).catch((function(n){console.log(&quot;error playing note&quot;,n)}))}function redraw(n,t){const e=abcArr[n];objsArr[n]=ABCJS.renderAbc(`abcjs-notation-${n}`,e,{visualTranspose:t,responsive:&quot;resize&quot;,clickListener:clickListener}),synthArr.forEach((n=&gt;{n.pause()})),initSynth(n,objsArr[n],t)}function initSynth(n,t,e=0){var i=new CursorControl(`abcjs-notation-${n}`,null),a=new ABCJS.synth.SynthController,o=document.getElementById(`abcjs-audio-${n}`);a.load(o,i,{displayRestart:!0,displayPlay:!0,displayProgress:!0}),a.disable(!0),synthArr[n]=a,(new ABCJS.synth.CreateSynth).init({visualObj:t[0],options:{responsive:&quot;resize&quot;}}).then((()=&gt;{a&amp;&amp;a.setTune(t[0],!1,{midiTranspose:e}).catch((n=&gt;{console.warn(&quot;Audio problem:&quot;,n)}))})).catch((n=&gt;{console.warn(&quot;Audio problem:&quot;,n)}))}function changeTransposeValue(n,t=1){var e=document.querySelector(`#transpose-${n}`);t=parseInt(t);let i=parseInt(e.value);e.value=i+t,redraw(n,e.value)}document.addEventListener(&quot;DOMContentLoaded&quot;,onDomReady);&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;(1) V7의 대리코드&lt;/b&gt;&lt;/h3&gt;
&lt;div id=&quot;code_1785411329972&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 103
M: 4/4
L: 1/1
Q: 1/1=60
K: C
V: clef=treble
%%MIDI gchordoff
x &amp;quot;G7&amp;quot; [GBdf] x || x &amp;quot;Bm7(-5)&amp;quot; [Bdfa] x || x &amp;quot;Db7&amp;quot; [_DF_A_c] x ||
w: V7 VIIm7(\-5) ♭II7
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 103
M: 4/4
L: 1/1
Q: 1/1=60
K: C
V: clef=treble
%%MIDI gchordoff
x &quot;G7&quot; [GBdf] x || x &quot;Bm7(-5)&quot; [Bdfa] x || x &quot;Db7&quot; [_DF_A_c] x ||
w: V7 VIIm7(\-5) ♭II7
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(a) VIIm7(-5) (C장조에서 Bm7(-5) 또는 B&amp;oslash;)&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;본 내용을 참조한 교재 '경음악편곡법 (마츠다 쇼 저)' 에서는 하프 디미니시드 7th (Half-diminished 7th) 코드를 Bm7(-5)와 같이 표기하고 있으나 표기상의 번잡함을 고려하여 이하 널리 쓰이는 표기법인 &lt;b&gt;B&amp;oslash;&lt;/b&gt; 와 같이 표기하겠습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도미넌트인 V7에 9th를 더하고 밑음을 생략하면 &lt;b&gt;VII&amp;oslash;&lt;/b&gt; 가 됩니다.&lt;/p&gt;
&lt;div id=&quot;code_1785412195623&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 82
L: 1/1
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2) (3 4)]
V:1 clef=treble
!mark!A || x ||
V:2 clef=treble
&amp;quot;^G7(9)&amp;quot; [G,B,DF] || &amp;quot;^B&amp;oslash;&amp;quot;[B,DFA] ||
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 82
L: 1/1
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2) (3 4)]
V:1 clef=treble
!mark!A || x ||
V:2 clef=treble
&quot;^G7(9)&quot; [G,B,DF] || &quot;^B&amp;oslash;&quot;[B,DFA] ||
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;(b) ♭II7 (&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;C장조에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;D♭7)&lt;/b&gt;&lt;/h4&gt;
&lt;div id=&quot;code_1785412668475&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 104
L: 1/1
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2 3 4)]
V:1 clef=treble
!mark!f f || !mark!B B ||
V:2 clef=treble
&amp;quot;^G7&amp;quot;d x || &amp;quot;^D♭7&amp;quot;_A
V:3 clef=treble
!mark!B B || !mark!F  F
V:4 clef=treble
G x || _D
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 104
L: 1/1
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2 3 4)]
V:1 clef=treble
!mark!f f || !mark!B B ||
V:2 clef=treble
&quot;^G7&quot;d x || &quot;^D♭7&quot;_A
V:3 clef=treble
!mark!B B || !mark!F  F
V:4 clef=treble
G x || _D
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 도미넌트 세븐스의 특징은 3도음과 7도음이 만드는 3온음(tritone)인 점을 상기해야 합니다. 그리고 &amp;lt;보기 104&amp;gt;를 보면 알 수 있듯이, G7의 3도음, 7도음과 D♭7의 3도음, 7도음은 완전히 같은 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1785673658633&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 105
L: 1/1
Q: 1/2=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2 3 4)]
V:1 clef=treble
&amp;quot;^(A)&amp;quot;&amp;quot;^G7&amp;quot; B &amp;quot;^C&amp;quot; c x// || &amp;quot;^(B)&amp;quot;&amp;quot;^D♭7&amp;quot; B &amp;quot;^G♭&amp;quot;_B ||
w: 3 _ 7
w: 7 _ 3
V:2 clef=treble
F E x// || F _G ||
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 105
L: 1/1
Q: 1/2=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [(1 2 3 4)]
V:1 clef=treble
&quot;^(A)&quot;&quot;^G7&quot; B &quot;^C&quot; c x// || &quot;^(B)&quot;&quot;^D♭7&quot; B &quot;^G♭&quot;_B ||
w: 3 _ 7
w: 7 _ 3
V:2 clef=treble
F E x// || F _G ||
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본래 《보기 105(b)》처럼 D♭m 의 3온음이라고 생각하면 'B'는 반음 내려가서 'B♭'으로 되고, 'F'는 반음 올라가서 'G♭'이 됩니다. 이것을 다른 관점으로 생각하면 'F'와 'B'를 《보기 105(a)》처럼 G7의 3온음이라고 생각하면 'B'는 반음 올라가서 'C'로 향하고, 'F'는 반음 내려가서 'E'로 향하는 것으로 여길 수 있고, 이러한 이유로 &lt;span&gt;♭&lt;/span&gt;&lt;span&gt;II7&lt;/span&gt;&lt;span&gt;이 &lt;/span&gt;&lt;span&gt;V7&lt;/span&gt;&lt;span&gt;의 &lt;/span&gt;&lt;span&gt;대리 &lt;/span&gt;&lt;span&gt;코드로 &lt;/span&gt;&lt;span&gt;될 &lt;/span&gt;&lt;span&gt;수 &lt;/span&gt;&lt;span&gt;있다고 보는 것입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;code_1785674015578&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 106
L: 1/2
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&amp;quot;^(A)&amp;quot; &amp;quot;^Dm7&amp;quot;[CFA] &amp;quot;^G7&amp;quot;[B,FG] | &amp;quot;^CM7&amp;quot;[B,2EG] || &amp;quot;^(B)&amp;quot;&amp;quot;^Dm7&amp;quot;[CFA] &amp;quot;^D♭7&amp;quot;[B,F_A] | &amp;quot;^CM7&amp;quot;[B,2EG] ||
w: Key~C: _ _ Key~C:
V:2 clef=bass
D, G,, | C,2 ||  D, _D, | C,2 || 
w: IIm7 V7 IM7 IIm7 ♭II7 IM7
w: ____ (subV7)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 106
L: 1/2
Q: 1/4=80
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&quot;^(A)&quot; &quot;^Dm7&quot;[CFA] &quot;^G7&quot;[B,FG] | &quot;^CM7&quot;[B,2EG] || &quot;^(B)&quot;&quot;^Dm7&quot;[CFA] &quot;^D♭7&quot;[B,F_A] | &quot;^CM7&quot;[B,2EG] ||
w: Key~C: _ _ Key~C:
V:2 clef=bass
D, G,, | C,2 ||  D, _D, | C,2 || 
w: IIm7 V7 IM7 IIm7 ♭II7 IM7
w: ____ (subV7)
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;♭II7(Db7)은&amp;nbsp;기능&amp;nbsp;분석에서&amp;nbsp;V7의&amp;nbsp;Substitute(대리)&amp;nbsp;코드라는&amp;nbsp;의미로&amp;nbsp;&lt;b&gt;sub V7&lt;/b&gt;이라고 쓸 때도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 도미넌트 세븐스의 대리 코드표입니다. 각 코드는 &lt;b&gt;증4도(감5도)&lt;/b&gt;의 관계로 되어 있습니다. 증4도(감5도)는 3도와 7도가 서로 뒤바뀐 형태로 일치하고, 그 결과 같은 도미넌트 기능을 수행할 수 있는 관계입니다.&lt;/p&gt;
&lt;table class=&quot;table&quot; style=&quot;height: 106px;&quot; width=&quot;568&quot; data-ke-align=&quot;alignCenter&quot; data-ke-style=&quot;style6&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;G7 &amp;harr; D♭7&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;E7 &amp;harr; B♭7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;C7 &amp;harr; G♭7&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;A7 &amp;harr; E♭7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;F7 &amp;harr; B7&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center;&quot;&gt;D7 &amp;harr; A♭7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;(2) 세컨더리 도미넌트 세븐스의 대리 코드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;증4도(감5도)&lt;/b&gt; 관계의 도미넌트 세븐스의 대리 코드는 세컨더리 도미넌트 세븐스에도 자주 사용됩니다.&lt;/p&gt;
&lt;div id=&quot;code_1785674846898&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 108
L: 1/2
Q: 1/4=100
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&amp;quot;^F♯&amp;oslash;&amp;quot;[Ace] &amp;quot;^B7 &amp;rarr; &amp;quot;[AB^D] | &amp;quot;^Em7&amp;quot;[GB=d] &amp;quot;^A7 &amp;rarr;&amp;quot;[GA^c] | &amp;quot;^Dm7&amp;quot;[F=Ac] &amp;quot;^G7 &amp;rarr;&amp;quot;[FGB] | &amp;quot;^CM7&amp;quot;[EGB]2 ||
w: ┗━투 파이브━┛ ┗━ ━┛ ┗━ ━┛ 
V:2 clef=bass
^F, B,, | E, A,, | D, G,, | C,2 ||
w: ♯IV&amp;oslash; VII7 IIIm7 VI7 IIm7 V7 IM7
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 108
L: 1/2
Q: 1/4=100
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&quot;^F♯&amp;oslash;&quot;[Ace] &quot;^B7 &amp;rarr; &quot;[AB^D] | &quot;^Em7&quot;[GB=d] &quot;^A7 &amp;rarr;&quot;[GA^c] | &quot;^Dm7&quot;[F=Ac] &quot;^G7 &amp;rarr;&quot;[FGB] | &quot;^CM7&quot;[EGB]2 ||
w: ┗━투 파이브━┛ ┗━ ━┛ ┗━ ━┛ 
V:2 clef=bass
^F, B,, | E, A,, | D, G,, | C,2 ||
w: ♯IV&amp;oslash; VII7 IIIm7 VI7 IIm7 V7 IM7
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;〈보기 108〉은 토닉인 CM으로 향해 IIm7 - V7(투 파이브)이 연속된 것인데, 세컨더리 도미넌트 세븐스의 &lt;b&gt;VII7(B7)&lt;/b&gt;과 &lt;b&gt;VI7(A7)&lt;/b&gt;에 대리 코드를 사용하면 〈보기 109〉와 같이 됩니다.&lt;/p&gt;
&lt;div id=&quot;code_1785675367061&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 109
L: 1/2
Q: 1/4=100
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&amp;quot;^F♯&amp;oslash;&amp;quot;[Ace] &amp;quot;^F7 ⇢&amp;quot;[Ac_e] | &amp;quot;^Em7&amp;quot;[GBd] &amp;quot;^E♭7 ⇢&amp;quot;[G_B_d] | &amp;quot;^Dm7&amp;quot;[FAc] &amp;quot;^D♭7 ⇢&amp;quot;[F_AB] | &amp;quot;^CM7&amp;quot;[EGB]2 ||
w: ╚(투~파이브 대리)╝ ╚═ ═╝ ╚═ ═╝ 
V:2 clef=bass
^F, =F, | E, _E, | D, _D, | C,2 ||
w: ♯IV&amp;oslash; IV7 IIIm7 ♭III7 IIm7 ♭II7 IM7
w: _ (sub~VII7) _ (sub~VI7) _ (sub~V7)
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 109
L: 1/2
Q: 1/4=100
K: C
%% %%MIDI program 46
%%MIDI gchord off
%%staves [1 2]
V:1 clef=treble
&quot;^F♯&amp;oslash;&quot;[Ace] &quot;^F7 ⇢&quot;[Ac_e] | &quot;^Em7&quot;[GBd] &quot;^E♭7 ⇢&quot;[G_B_d] | &quot;^Dm7&quot;[FAc] &quot;^D♭7 ⇢&quot;[F_AB] | &quot;^CM7&quot;[EGB]2 ||
w: ╚(투~파이브 대리)╝ ╚═ ═╝ ╚═ ═╝ 
V:2 clef=bass
^F, =F, | E, _E, | D, _D, | C,2 ||
w: ♯IV&amp;oslash; IV7 IIIm7 ♭III7 IIm7 ♭II7 IM7
w: _ (sub~VII7) _ (sub~VI7) _ (sub~V7)
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;예제&lt;/b&gt;&lt;/h4&gt;
&lt;div id=&quot;code_1785676035577&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;code class=&amp;quot;abc&amp;quot;&amp;gt;
X: 1
R: 보기 110 (일부)
L: 1/8
Q: 1/4=120
K: C
M: C
%% %%MIDI program 46
%%staves [1 2]
V:1 clef=treble
&amp;quot;F#07&amp;quot;z2z ^G Acdc | &amp;quot;F7&amp;quot;_e2 d2 c d3 | &amp;quot;Em7&amp;quot;z2z ^D EGAG | &amp;quot;Eb7&amp;quot;_B2 AG-G4 | &amp;quot;Dm7&amp;quot;z2z ^G Acdc | &amp;quot;Db7&amp;quot;g2 f2 _e2 fg- | &amp;quot;CM7&amp;quot;g8 ||
w: ╚═ ____ ╝ __ ⇢ ╚═ ____ ╝ __ ⇢ ╚═ ____ ╝ ___ ⇢
&amp;lt;/code&amp;gt;&quot;&gt;&lt;code class=&quot;abc&quot;&gt;
X: 1
R: 보기 110 (일부)
L: 1/8
Q: 1/4=120
K: C
M: C
%% %%MIDI program 46
%%staves [1 2]
V:1 clef=treble
&quot;F#07&quot;z2z ^G Acdc | &quot;F7&quot;_e2 d2 c d3 | &quot;Em7&quot;z2z ^D EGAG | &quot;Eb7&quot;_B2 AG-G4 | &quot;Dm7&quot;z2z ^G Acdc | &quot;Db7&quot;g2 f2 _e2 fg- | &quot;CM7&quot;g8 ||
w: ╚═ ____ ╝ __ ⇢ ╚═ ____ ╝ __ ⇢ ╚═ ____ ╝ ___ ⇢
&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;연습문제&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1785675490388&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;경음악편곡법 연습문제 도미넌트 세븐스의 대리(p.94) 문제 해답과 코드 듣기&quot; data-og-description=&quot;연습문제 1연습문제 2 연습문제 1 &amp;amp; 2 (G키)&quot; data-og-host=&quot;infoarmory.tistory.com&quot; data-og-source-url=&quot;https://infoarmory.tistory.com/111&quot; data-og-url=&quot;https://infoarmory.tistory.com/111&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cIa69R/dJMb84qnfwl/tS5Ickiu1m2CJSqj5V9fH1/img.png?width=619&amp;amp;height=401&amp;amp;face=0_0_619_401,https://scrap.kakaocdn.net/dn/f6At3/dJMb86Pgrfj/F5R7wcKU2Lk2hIcDy2W1tk/img.png?width=619&amp;amp;height=401&amp;amp;face=0_0_619_401&quot;&gt;&lt;a href=&quot;https://infoarmory.tistory.com/111&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://infoarmory.tistory.com/111&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cIa69R/dJMb84qnfwl/tS5Ickiu1m2CJSqj5V9fH1/img.png?width=619&amp;amp;height=401&amp;amp;face=0_0_619_401,https://scrap.kakaocdn.net/dn/f6At3/dJMb86Pgrfj/F5R7wcKU2Lk2hIcDy2W1tk/img.png?width=619&amp;amp;height=401&amp;amp;face=0_0_619_401');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;경음악편곡법 연습문제 도미넌트 세븐스의 대리(p.94) 문제 해답과 코드 듣기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;연습문제 1연습문제 2 연습문제 1 &amp;amp; 2 (G키)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;infoarmory.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/재즈화성학(경음악편곡법)</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/299</guid>
      <comments>https://infoarmory.tistory.com/299#entry299comment</comments>
      <pubDate>Sun, 2 Aug 2026 22:10:52 +0900</pubDate>
    </item>
    <item>
      <title>다른 기차들 (Different Trains) - 스티브 라이히(Steve Reich) (설명, 가사)</title>
      <link>https://infoarmory.tistory.com/298</link>
      <description>&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=qcGqVynCPaw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/vNy4f/dJMb9aKPimV/p8205ZI5upqgKfRqJqRi71/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=542_224_706_404,https://scrap.kakaocdn.net/dn/ctdikE/dJMb88Gfmme/V3G0HXEt2XgMy53L3UmfPK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=542_224_706_404,https://scrap.kakaocdn.net/dn/GGTvM/dJMb82MNt2N/zeqlFOB4H6CDDAPK1aPqdk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=542_224_706_404&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Steve Reich&amp;rsquo;s Different Trains with London Contemporary Orchestra | Boiler Room&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/qcGqVynCPaw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #2a2a2a; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;different-trains-다른-기차&quot; style=&quot;background-color: #ffffff; color: #2a2a2a; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;Different Trains (다른 기차들)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Different Trains는 1988년 Steve Reich(스티브 라이히)가 작곡한 현악 4중주와 테이프를 위한 3악장 작품입니다. 이 작품은 크로노스 콰르텟(Kronos Quartet)의 멤버 Betty Freeman이 위촉하여 작곡되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OLtKA/dJMcaf1niks/D8lSWjmv2XJDqUAjifLh5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OLtKA/dJMcaf1niks/D8lSWjmv2XJDqUAjifLh5K/img.jpg&quot; data-alt=&quot;Different Trains를 연주하는 스티브 라이히 앙상블(The Steve Reich Ensemble).&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OLtKA/dJMcaf1niks/D8lSWjmv2XJDqUAjifLh5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOLtKA%2FdJMcaf1niks%2FD8lSWjmv2XJDqUAjifLh5K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;347&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Different Trains를 연주하는 스티브 라이히 앙상블(The Steve Reich Ensemble).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #34343c; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장르&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 현대 클래식 음악&lt;/li&gt;
&lt;li&gt;&lt;b&gt;언어&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 영어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작곡 연도&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 1988년&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연주 시간&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 27:00&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 3악장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;편성&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 현악 4중주와 테이프 (*사전 녹음된 백그라운드 재생용)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;초연&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;연도&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 1988년&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장소&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- New Music America Festival, 마이애미&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연주 단체&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 크로노스 콰르텟 (Kronos Quartet)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PyTNb/dJMcafty535/LpBM4g1UplTnFWcxmge4C1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PyTNb/dJMcafty535/LpBM4g1UplTnFWcxmge4C1/img.jpg&quot; data-alt=&quot;스티브 라이히(Steve Reich)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PyTNb/dJMcafty535/LpBM4g1UplTnFWcxmge4C1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPyTNb%2FdJMcafty535%2FLpBM4g1UplTnFWcxmge4C1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;291&quot; height=&quot;276&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스티브 라이히(Steve Reich)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;스티븐 마이클 라이히(Stephen Michael Reich, 1936년 10월 3일 ~ )는 1960년대 중반에서 후반의 미니멀리즘 음악의 발달에 기여한 것으로 알려진 미국의 작곡가이다. 《Music for 18 Musicians》 (1978년)등의 작품을 통해 미니멀리즘이 하나의 조류로 자리잡게 도와주었고 1980년대에는 그의 유대교적 배경을 바탕으로 《Different Trains》 (1988년) 같은 작품을 만들기도 하였다. 라이히의 작곡 스타일은 미국의 많은 현대 작곡가와 그룹에 영향을 미쳤다. 가디언지에서 음악 평론가 앤드루 클레멘츠는 라이히가 음악사의 방향을 바꾼 살아있는 몇 안 되는 작곡가들 중 한 명이라고 주장하였다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;
&lt;h3 id=&quot;배경&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;배경&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제2차 세계 대전 중에 스티브 라이히는 별거한 부모를 방문하기 위해 뉴욕과 로스앤젤레스 사이를 기차로 여행하였습니다. 몇 년 후, 그는 유대인으로서 당시 미국이 아니라 유럽에 있었다면 홀로코스트 열차를 타고 여행했을 수 있다는 사실을 곰곰이 생각했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스티브 라이히의 초기 작품은 테이프를 자주 사용하고 반복하고 다른 속도로 재생하는 방식이었습니다. 그러나 Different Trains는 &lt;u&gt;녹음된 음성을 멜로디의 소스로 사용&lt;/u&gt;하는 참신한 실험이었습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kx4i2/dJMcaff5DpO/HTkDmyCl2chTNJHyUv5H90/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kx4i2/dJMcaff5DpO/HTkDmyCl2chTNJHyUv5H90/img.jpg&quot; data-alt=&quot;작중 음성 녹음의 대사 중 하나인 &amp;amp;ldquo;from Chicago to New York&amp;amp;rdquo;이 멜로디로 변환된 형태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kx4i2/dJMcaff5DpO/HTkDmyCl2chTNJHyUv5H90/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkx4i2%2FdJMcaff5DpO%2FHTkDmyCl2chTNJHyUv5H90%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;387&quot; height=&quot;81&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;작중 음성 녹음의 대사 중 하나인 &amp;ldquo;from Chicago to New York&amp;rdquo;이 멜로디로 변환된 형태&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;구조&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;구조&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=D_2PwYmmbXI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bFh7NF/dJMb8Yp5Jur/YyP1al6KomS2owm9Ee0QVk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/dXOWdm/dJMb8VNF13B/nNCuQzvkLcqySymgxALoBk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Steve Reich - Different Trains (1988)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/D_2PwYmmbXI&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Different Trains는 다음과 같은 제목을 가진 세 악장으로 구성됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;America &amp;ndash; Before the War (미국 - 전쟁 전)&lt;/li&gt;
&lt;li&gt;Europe &amp;ndash; During the War (유럽 - 전쟁 중)&lt;/li&gt;
&lt;li&gt;After the War (전쟁 후에)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 부분에서 멜로디가 도입되며 일반적으로 단일 악기(여성 음성은 비올라, 남성 음성은 첼로)로 멜로디가 파생된 음성 녹음이 연주됩니다. 그리고 나서 멜로디는 그 악구(phrase)의 녹음(사전녹음된 테이프)과 함께 악기가 연주되거나 또는 악구의 일부로 일정 기간 동안 발전합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현악 4중주를 위한 음악인만큼 드럼을 치는 대신 현악기가 피치를 번갈아 가며 파라디들(parariddle) 리듬을 광범위하게 사용합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pjz7L/dJMcacp74bz/LF58O2bJQGaCD9Wk4m4mBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pjz7L/dJMcacp74bz/LF58O2bJQGaCD9Wk4m4mBK/img.jpg&quot; data-alt=&quot;현악기로 Paradiddle을 연주하는 부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pjz7L/dJMcacp74bz/LF58O2bJQGaCD9Wk4m4mBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpjz7L%2FdJMcacp74bz%2FLF58O2bJQGaCD9Wk4m4mBK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;464&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;현악기로 Paradiddle을 연주하는 부분&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;파라디들 (Paradiddle):&lt;/b&gt; L-R-L-L 또는 R-L-R-R의 순서로 연주되는 4개의 짝수 스트로크로 구성된 드럼의 기본 패턴 중 하나.&lt;/blockquote&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;489&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmcw0/dJMcai4PMWL/ICD0C4HZdxLIAOyQPvbyz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmcw0/dJMcai4PMWL/ICD0C4HZdxLIAOyQPvbyz1/img.jpg&quot; data-alt=&quot;파라디들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmcw0/dJMcai4PMWL/ICD0C4HZdxLIAOyQPvbyz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frmcw0%2FdJMcai4PMWL%2FICD0C4HZdxLIAOyQPvbyz1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;815&quot; height=&quot;489&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;489&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파라디들&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;음성 대사 외에도 이 작품의 테이프에는 기차 소리와 사이렌, 경고용 종소리가 포함되어 있으며 현악 4중주로 미리 녹음된 여러 라인들이 포함되어 있어 효과적으로 4개의 4중주를 하나로 통합하고 있습니다. 이러한 기법은 스티브 라이히가 이전에 작곡한 세 개의 대위법(Counterpoint) 작품에서 사용된 것과 유사합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Vermont Counterpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for multiple multitracked flutes&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New York Counterpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for multiple multitracked clarinets&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Electric Counterpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for multiple multitracked electric guitars&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=MOAS6ik796s&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/B9NCz/dJMb9cBSeyF/LRDvh1khKq5OKDznHy1FVK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/imFTe/dJMb9b32fMC/XbtQD9diEbHZSGWOCVrMm1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Electric Counterpoint - Steve Reich&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/MOAS6ik796s&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;Electric Counterpoint&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Different Trains의 기초가 되는 음성 녹음은 제2차 세계 대전이 일어나기 직전, 전쟁 중, 그리고 직후에 미국과 유럽 사람들과의 인터뷰에서 가져왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;악장&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;Different Trains의 기초가 되는 음성 녹음은 제2차 세계 대전이 일어나기 직전, 전쟁 중, 그리고 직후에 미국과 유럽 사람들과의 인터뷰에서 가져왔습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;1악장-america--before-the-war-미국---전쟁-전&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;1악장 America &amp;ndash; Before the War (미국 - 전쟁 전)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배경 소리로 미국 기차 소리가 들리는 동안 스티브 라이히의 가정교사 버지니아(Virginia)와 풀먼 차량(침대차 또는 객차) 운반인인 로렌스 데이비스(Lawrence Davis)가 미국 기차 여행을 회상합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;2악장-europe--during-the-war-유럽---전쟁-중&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;2악장 Europe &amp;ndash; During the War (유럽 - 전쟁 중)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 명의 홀로코스트 생존자(라이히가 Paul, Rachel, Rachella로 식별함)가 강제 수용소로의 기차 여행을 포함하여 전쟁 중 유럽에서의 경험에 대해 이야기합니다. 이 동작에서 유럽 기차 소리와 사이렌이 들립니다. 미국 기차의 경적은 길게 울리는 완전 4-5도 사이의 소리인 반면, 유럽 기차의 경적은 대부분 짧게 울리는 3화음의 날카로운 비명(shriek)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;3악장-after-the-war-전쟁-후에&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;3악장 After the War (전쟁 후에)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀로코스트 생존자들이 데이비스와 버지니아의 녹음과 함께 제2차 세계 대전 직후의 몇 년간에 대해 이야기하는 것을 특징으로 합니다. 첫 번째 악장의 미국 기차 소리로 돌아갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ei6GsQ/dJMcadoVwl0/PoEXVe1dNe1AVLGD1efRIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ei6GsQ/dJMcadoVwl0/PoEXVe1dNe1AVLGD1efRIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ei6GsQ/dJMcadoVwl0/PoEXVe1dNe1AVLGD1efRIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fei6GsQ%2FdJMcadoVwl0%2FPoEXVe1dNe1AVLGD1efRIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;404&quot; height=&quot;404&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;영향&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스티브 라이히는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Cave&lt;/b&gt;(1993) 및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;City Life&lt;/b&gt;(1995)와 같은 프로젝트를 통해 이러한 &amp;ldquo;음성 멜로디&amp;rdquo; 기법을 더욱 발전시켰습니다. 이 기법은 일상 생활과 병치된 인간의 비극과 그에 대한 대응을 다룬 유사한 작품인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;WTC 9/11&lt;/b&gt;(2011)에도 나타납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스티브 라이히는 자신의 음성 녹음을 디지털 샘플링 키보드(Casio FZ-1)로 전송하여 이러한 작품을 만들었습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;City Life&lt;/b&gt;는 연주에 샘플링 키보드를 사용했으며(백킹 테이프를 사용하지 않고) 샘플은 기존 악기와 정확히 동일한 방식으로 기보 및 연주됩니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqjIr/dJMcafNWZLx/iLjAk3EBuYrje6HXMjq5k0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqjIr/dJMcafNWZLx/iLjAk3EBuYrje6HXMjq5k0/img.jpg&quot; data-alt=&quot;Casio FZ-1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqjIr/dJMcafNWZLx/iLjAk3EBuYrje6HXMjq5k0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqjIr%2FdJMcafNWZLx%2FiLjAk3EBuYrje6HXMjq5k0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;464&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Casio FZ-1&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;평판&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;평판&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세계 최초 초연은 1988년 뉴 뮤직 아메리카 페스티벌 기간 동안 마이애미에 있는 제일장로교회(First Presbyterian Church)에서 크로노스 콰르텟(Kronos Quartet)이 연주했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;크로노스 콰르텟&lt;/span&gt;이 연주한 오리지널 레코딩은 1989년 그래미 어워드에서 최우수 클래식 현대 작곡상을 수상했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;가사&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;가사&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 id=&quot;i-america---before-the-war-미국---전쟁-전&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;【I】 America - Before the War&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;미국 - 전쟁 전&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From Chicago to New York&lt;br /&gt;시카고에서 뉴욕으로 가는 &lt;i&gt;(Virginia)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;One of the fastest trains&lt;br /&gt;가장 빠른 기차 중 하나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;The &lt;u&gt;crack&lt;/u&gt;&amp;rdquo; train from New York&lt;br /&gt;뉴욕에서 출발하는 최고의 기차 &lt;i&gt;(Mr. Davis)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From New York to Los Angeles&lt;br /&gt;뉴욕에서 로스앤젤레스까지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Different trains everyday&lt;br /&gt;매일 다른 기차 &lt;i&gt;(Virginia)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From Chicago to New York&lt;br /&gt;시카고에서 뉴욕으로 가는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;In 1939&lt;br /&gt;1939년에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1939&lt;br /&gt;1939년 &lt;i&gt;(Mr. Davis)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1940&lt;br /&gt;1940년&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1941&lt;br /&gt;1941년&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1941&lt;br /&gt;I guess it must&amp;rsquo;ve been 1941년. 아마 그랬을 거에요 &lt;i&gt;(Virginia)&lt;/i&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;*&lt;b&gt;Crack:&lt;/b&gt; &amp;ldquo;최고&amp;rdquo;라는 의미의 옛날 말&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;ii-europe---during-the-war-유럽---전쟁-중&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;【II】 Europe - During the War&lt;/b&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;b&gt;유럽 - 전쟁 중&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1940&lt;br /&gt;1940년 &lt;i&gt;(Rachella)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;On my birthday&lt;br /&gt;내 생일에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The Germans walked&lt;br /&gt;독일인이 걸었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Walked into Holland&lt;br /&gt;네덜란드로 걸어갔다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Germans invaded Hungary&lt;br /&gt;독일군이 헝가리를 침공했다 &lt;i&gt;(Paul)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I was in second grade&lt;br /&gt;나는 2학년이었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I had a teacher&lt;br /&gt;나는 선생님이 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A very tall man, his head was completely plastered smooth&lt;br /&gt;아주 키가 큰 남자, 그의 머리는 완전히 매끄럽게 회반죽(platsterd)이 되어 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;He said, &amp;ldquo;Black Crows&amp;rdquo;&lt;br /&gt;그는 &amp;ldquo;검은 까마귀&amp;rdquo;라 말했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Black Crows invaded our country, many years ago&amp;rdquo;&amp;rdquo;&lt;br /&gt;&amp;ldquo;검은 까마귀가 우리 나라를 침공한 것은 수년 전&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And he pointed right at me&lt;br /&gt;그리고 그는 나를 똑바로 가리켰다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;No more school&lt;br /&gt;더 이상 학교는 없다 (Rachel)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You must go away&lt;br /&gt;너는 도망가야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And she said, &amp;ldquo;Quick, go!&amp;rdquo;&lt;br /&gt;그리고 그녀는 &amp;ldquo;빨리, 가!&amp;rdquo;라고 말했다 &lt;i&gt;(Rachella)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And he said, &amp;ldquo;Don&amp;rsquo;t breathe&amp;rdquo;&lt;br /&gt;그리고 그는 &amp;ldquo;숨죽이고 가&amp;rdquo;라고 말했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Into the cattle wagons&lt;br /&gt;소 마차 안으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And for four days and four nights&lt;br /&gt;그리고 4박 4일 동안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And then they went through these strange sounding names&lt;br /&gt;그리고 그들은 이 이상하게 들리는 이름들을 살펴봤다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Polish-Polish names&lt;br /&gt;폴란드-폴란드 이름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lots of cattle wagons there&lt;br /&gt;많은 소 마차가 그곳에 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;They were loaded with people&lt;br /&gt;그 마차들은 사람들로 가득 차 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;They shaved us&lt;br /&gt;그들은 우리들을 면도했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;They tattooed a number on our arm&lt;br /&gt;그들은 우리 팔에 숫자를 새겼다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flames going up in the sky&lt;br /&gt;불꽃이 하늘로 올라간다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It was smokey&lt;br /&gt;연기가 가득했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;iii-after-the-war-전쟁-후에&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;【III】 After the War&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;전쟁 후에&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Then the war was over&lt;br /&gt;그리고 전쟁은 끝났다 &lt;i&gt;(Paul)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Are you sure?&lt;br /&gt;확실한가요? &lt;i&gt;(Rachella)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The war is over&lt;br /&gt;전쟁은 끝났다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Going to America&lt;br /&gt;미국으로 간다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;To Los Angeles&lt;br /&gt;로스앤젤레스로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;To New York&lt;br /&gt;뉴욕으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From New York to Los Angeles&lt;br /&gt;뉴욕에서 로스앤젤레스까지 &lt;i&gt;(Mr. Davis)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;One of the fastest trains&lt;br /&gt;가장 빠른 기차 중 하나 &lt;i&gt;(Virginia)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;But today, they&amp;rsquo;re all gone&lt;br /&gt;하지만 오늘은 모두 사라졌다 &lt;i&gt;(Mr. Davis)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There was one girl who had a beautiful voice&lt;br /&gt;아름다운 목소리를 가진 한 소녀가 있었다 &lt;i&gt;(Rachella)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And they loved to listen to the singing, the Germans&lt;br /&gt;그리고 그들(독일인들)은 노래를 듣는 것을 좋아했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;And when she stopped singing, they said, &amp;ldquo;More! More!&amp;rdquo; and they applauded&lt;br /&gt;그리고 그녀가 노래를 멈췄을 때 그들은 &amp;ldquo;더! 더!&amp;rdquo;라고 말했고 그들은 박수를 쳤다&lt;/p&gt;
&lt;/div&gt;</description>
      <category>클래식|윈드뮤직 등등/현대음악</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/298</guid>
      <comments>https://infoarmory.tistory.com/298#entry298comment</comments>
      <pubDate>Sat, 27 Jun 2026 02:33:42 +0900</pubDate>
    </item>
    <item>
      <title>모차르트 《마술피리》의 밤의 여왕 아리아, 그리고 플로렌스 포스터 젠킨스</title>
      <link>https://infoarmory.tistory.com/297</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모차르트 《마술피리》의 밤의 여왕 아리아와 플로렌스 포스터 젠킨스&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 10.38.19.png&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYfM4P/dJMcagsa2eL/VSKuwVi9Y7X2sKcL9OeUfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYfM4P/dJMcagsa2eL/VSKuwVi9Y7X2sKcL9OeUfk/img.png&quot; data-alt=&quot;&amp;amp;copy; HAYDAR YUKSEL - http://www.redbubble.com/people/teearth&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYfM4P/dJMcagsa2eL/VSKuwVi9Y7X2sKcL9OeUfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYfM4P%2FdJMcagsa2eL%2FVSKuwVi9Y7X2sKcL9OeUfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;581&quot; data-filename=&quot;스크린샷 2026-06-01 오후 10.38.19.png&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;581&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;copy; HAYDAR YUKSEL - http://www.redbubble.com/people/teearth&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오페라를 잘 모르는 사람이라도 한 번쯤은 들어봤을 법한 곡이 있습니다. 높은 음역대를 자유롭게 오르내리는 화려한 선율로 유명한 &lt;b&gt;「밤의 여왕 아리아(Queen of the Night Aria)」&lt;/b&gt;입니다. 이 곡은 오페라 역사상 가장 유명한 소프라노 아리아 가운데 하나로 꼽히며, 성악가들에게는 실력을 증명하는 대표적인 레퍼토리로 알려져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 곡은 뛰어난 성악가들뿐만 아니라, 전혀 다른 이유로 음악사에 이름을 남긴 한 인물과도 관련이 있습니다. 바로 &lt;b&gt;플로렌스 포스터 젠킨스(Florence Foster Jenkins)&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;작품 소개&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모차르트와 《마술피리》&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;볼프강 아마데우스 모차르트(Wolfgang Amadeus Mozart; 1756&amp;ndash;1791)는 고전주의 시대를 대표하는 천재 작곡가입니다. 3세 때 이미 클라비코드 연주를, 5세 때 작곡을 시작한 그는 교향곡, 협주곡, 실내악, 오페라 등 거의 모든 장르에서 불멸의 명작을 남겼습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ma8hn/dJMcaaS24S9/slHkbx8QVMfKsWSD1pkt3k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ma8hn/dJMcaaS24S9/slHkbx8QVMfKsWSD1pkt3k/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ma8hn/dJMcaaS24S9/slHkbx8QVMfKsWSD1pkt3k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMa8hn%2FdJMcaaS24S9%2FslHkbx8QVMfKsWSD1pkt3k%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;395&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;《마술피리(Die Zauberfl&amp;ouml;te, K. 620)》는 1791년 9월 30일 빈의 Freihaus-Theater에서 초연된 모차르트의 마지막 오페라입니다. 독일어 징슈필(Singspiel) 형식으로, 노래와 대사가 번갈아 나오는 대중적인 형식을 취했습니다. 대본은 극장 주인이자 프리메이슨 회원인 에마누엘 시카네더(Emanuel Schikaneder)가 썼습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;징슈필(Singspiel)&lt;/b&gt;: 독일어로&amp;nbsp;'노래(Sing)와&amp;nbsp;연극(Spiel)'을&amp;nbsp;뜻하는&amp;nbsp;18세기&amp;nbsp;독일의&amp;nbsp;민속&amp;nbsp;음악극&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표면적으로는 왕자 타미노가 공주 파미나를 구하는 동화 같은 이야기지만, 깊이 들어가면 &lt;b&gt;선과 악, 이성과 감정, 계몽과 성장&lt;/b&gt;이라는 철학적 주제를 다룹니다. 오늘날에도 가장 많이 공연되는 오페라 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;아리아(Aria)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오페라에서 &lt;b&gt;아리아(Aria)&lt;/b&gt;는 등장인물이 내면의 감정을 독창으로 표현하는 곡입니다. 레치타티보(대사)가 이야기를 진행한다면, 아리아는 감정의 절정을 음악으로 승화시킵니다. 사랑, 분노, 복수, 절망 등 강렬한 감정이 극적으로 드러나는 부분입니다. 가장 두드러지는 곡이 많고, 대중들에게 유명한 오페라 곡들은 대개 아리아 곡인 것이 많습니다. 유명한 아리아의 예는 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;자코모 푸치니&lt;/b&gt;&lt;/span&gt;(&lt;span&gt;Giacomo Puccini&lt;/span&gt;) &amp;ndash; 《투란도트》 중 &lt;span&gt;&lt;b&gt;&amp;ldquo;Nessun dorma&amp;rdquo;&lt;/b&gt;&lt;/span&gt; (공주는 잠 못 이루고)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;조르주 비제&lt;/b&gt;&lt;/span&gt;(&lt;span&gt;Georges Bizet&lt;/span&gt;) &amp;ndash; 《카르멘》 중 &lt;span&gt;&lt;b&gt;&amp;ldquo;Habanera&amp;rdquo;&lt;/b&gt;&lt;/span&gt; (사랑은 길들지 않는 새)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;주세페 베르디&lt;/b&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Giuseppe Verdi&lt;/span&gt;&lt;span&gt;) &amp;ndash; 《리골레토》 중 &lt;/span&gt;&lt;span&gt;&lt;b&gt;&amp;ldquo;La donna &amp;egrave; mobile&amp;rdquo;&lt;/b&gt;&lt;/span&gt;&lt;span&gt; (여자의 마음)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;빈첸초 벨리니&lt;/b&gt;&lt;/span&gt;(&lt;span&gt;Vincenzo Bellini&lt;/span&gt;) &amp;ndash; 《노르마》 중 &lt;span&gt;&lt;b&gt;&amp;ldquo;Casta Diva&amp;rdquo;&lt;/b&gt;&lt;/span&gt; (정결한 여신이여)&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;b&gt;가에타노 도니체티&lt;/b&gt;&lt;/span&gt;(&lt;span&gt;Gaetano Donizetti&lt;/span&gt;) &amp;ndash; 《사랑의 묘약》 중 &lt;span&gt;&lt;b&gt;&amp;ldquo;Una furtiva lagrima&amp;rdquo;&lt;/b&gt;&lt;/span&gt; (남몰래 흐른 눈물)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;밤의 여왕 아리아&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정식 제목은 &lt;b&gt;「Der H&amp;ouml;lle Rache kocht in meinem Herzen」&lt;/b&gt;(지옥의 복수가 내 마음속에서 끓어오른다)으로, 《마술피리》 2막에 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오페라에서&amp;nbsp;밤의&amp;nbsp;여왕은&amp;nbsp;자신의&amp;nbsp;딸인&amp;nbsp;파미나가&amp;nbsp;현자&amp;nbsp;자라스트로의&amp;nbsp;곁에&amp;nbsp;머물고&amp;nbsp;있다는&amp;nbsp;사실에&amp;nbsp;분노합니다.&amp;nbsp;딸을&amp;nbsp;되찾고&amp;nbsp;자신의&amp;nbsp;권력을&amp;nbsp;되찾고자&amp;nbsp;한&amp;nbsp;밤의&amp;nbsp;여왕은&amp;nbsp;파미나에게&amp;nbsp;단검을&amp;nbsp;건네며&amp;nbsp;자라스트로를&amp;nbsp;죽이라고&amp;nbsp;강요합니다.&amp;nbsp;이때&amp;nbsp;폭발적인&amp;nbsp;분노와&amp;nbsp;위협을&amp;nbsp;담아&amp;nbsp;부르는&amp;nbsp;곡이&amp;nbsp;바로&amp;nbsp;「밤의&amp;nbsp;여왕&amp;nbsp;아리아」입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 곡의 하이라이트는 최고음 F6 입니다. 이 음은 (피아노의 가장 높은 음보다 높은 초고음)으로 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;빠른 &lt;/span&gt;&lt;b&gt;콜로라투라(coloratura)&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 기교(음계, 트릴, 스타카토) 및 분위기를 더욱 극적으로 만들어주는 관현악 반주와 긴장감에 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;콜로라투라(Coloratura)&lt;/b&gt;: 이탈리아어로 '색을 입히다', '채색하다'라는 뜻에서 유래한 클래식/성악 용어입니다. 오페라 아리아 등에서 빠르고 화려한 음계, 트릴(음의 빠른 교대), 꾸밈음 등을 사용해 기교적으로 곡을 장식하는 창법이나 선율을 의미합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-01 오후 10.48.03.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eMnHGS/dJMcaaS241q/oe7Oq5Y6Uizs8kzvmsP7tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eMnHGS/dJMcaaS241q/oe7Oq5Y6Uizs8kzvmsP7tk/img.png&quot; data-alt=&quot;밤의 여왕 그 부분 악보. 플루트용 편곡 악보이지만 음역은 소프라노와 같습니다. https://musescore.com/user/11808921/scores/4117286&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eMnHGS/dJMcaaS241q/oe7Oq5Y6Uizs8kzvmsP7tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMnHGS%2FdJMcaaS241q%2Foe7Oq5Y6Uizs8kzvmsP7tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;772&quot; data-filename=&quot;스크린샷 2026-06-01 오후 10.48.03.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;밤의 여왕 그 부분 악보. 플루트용 편곡 악보이지만 음역은 소프라노와 같습니다. https://musescore.com/user/11808921/scores/4117286&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때문에 세계 최고의 소프라노들에게도 &amp;ldquo;가장 어려운 아리아&amp;rdquo;로 평가받으며, 일류 소프라노로 도약하고 인정받기 위해 필수적으로 검증받아야 할 곡으로 자리매김하게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에도 &lt;b&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EB%94%94%EC%95%84%EB%82%98_%EB%8B%B4%EB%9D%BC%EC%9A%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Diana Damrau&lt;/a&gt;(1971- ; 독일)&lt;/b&gt;, &lt;b&gt;Natalie Dessay&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Aleksandra Olczyk&lt;/b&gt;, &lt;b&gt;Anna Dennis&lt;/b&gt; 등 많은 소프라노들이 이 곡으로 관객을 사로잡고 있습니다. 소프라노 외에도 다양한 악기로 편곡되어 연주되고 있으며, 대중적으로도 매우 유명한 곡이기 때문에 쇼핑센터나 레스토랑에서 깜짝 공연으로 부르는 경우도 화제가 되고 있습니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=YuBeBjqKSGQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/XIPkX/dJMb9hC8jAB/xQwP3UjGD8riWEjF8nQlHK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=666_134_764_242,https://scrap.kakaocdn.net/dn/bW4iPg/dJMb9c9EXad/UTonkfmIPqe8DdlCQgktu1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=666_134_764_242&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;The Magic Flute &amp;ndash; Queen of the Night aria (Mozart; Diana Damrau, The Royal Opera)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/YuBeBjqKSGQ&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;The Magic Flute &amp;ndash; Queen of the Night aria (Mozart; Diana Damrau, The Royal Opera)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=lJJW0dE5GF0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bJk4Gm/dJMb84X5TxP/B5aEpoVzbi2uRh9vThO3OK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=754_106_948_318,https://scrap.kakaocdn.net/dn/bPoAs0/dJMb81G4zuT/EnQRRmjCc3wcVw3LFYrdu1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=754_106_948_318,https://scrap.kakaocdn.net/dn/bpAJEO/dJMb8RRY376/kbxOlkTY9mqsm7Jo5lxgq1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=754_106_948_318&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Diana Damrau sings Mozart&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/lJJW0dE5GF0&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;Diana Damrau sings Mozart's &quot;Queen of the Night&quot; aria&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;작품 해설&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18세기 후반 계몽주의 시대, 모차르트와 시카네더(마술피리의 대본 작가)는 모두 &lt;b&gt;프리메이슨&lt;/b&gt; 회원이었습니다. 작품 곳곳에 프리메이슨 상징이 담겨 있습니다. 특히 &lt;b&gt;숫자 3&lt;/b&gt; (3명의 여인, 3명의 정령, 3번의 시련, 전주곡의 세 번 울리는 화음, E-flat 장조의 3개의 플랫 등)이 상징적으로 사용됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/17Gud/dJMcadvnszY/VMVvKBZ5M0qi1n1OF9TklK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/17Gud/dJMcadvnszY/VMVvKBZ5M0qi1n1OF9TklK/img.jpg&quot; data-alt=&quot;프리메이슨 모차르트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/17Gud/dJMcadvnszY/VMVvKBZ5M0qi1n1OF9TklK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F17Gud%2FdJMcadvnszY%2FVMVvKBZ5M0qi1n1OF9TklK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;635&quot; height=&quot;430&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프리메이슨 모차르트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 밤의 여왕이 &amp;lsquo;선한 어머니&amp;rsquo;, 자라스트로가 &amp;lsquo;악한 마법사&amp;rsquo;처럼 보이지만, 이야기가 진행되면서 &lt;b&gt;진정한 선(이성&amp;middot;빛)과 악(복수&amp;middot;어둠)&lt;/b&gt;의 개념이 뒤집힙니다. 이는 계몽주의와 프리메이슨의 이상을 반영한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중에서 밤의 여왕 아리아는 분노의 극대화입니다. 관현악이 불길처럼 타오르고, 소프라노는 고음의 폭풍을 연속으로 뿜어냅니다. 특히 후반부의 &amp;ldquo;H&amp;ouml;rt! H&amp;ouml;rt! H&amp;ouml;rt!&amp;rdquo;와 F6 고음은 관객에게 전율을 선사합니다. 이 곡은 단순한 기교 쇼케이스가 아니라, 캐릭터의 심리를 음악으로 그려낸 걸작으로 평가받고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;플로렌스 포스터 젠킨스와 밤의 여왕&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;플로렌스 포스터 젠킨스는 누구인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3aZmD/dJMb990VQQ9/n0GnXz6Wp6y0TEe3bZmMlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3aZmD/dJMb990VQQ9/n0GnXz6Wp6y0TEe3bZmMlk/img.jpg&quot; data-alt=&quot;왼쪽: 플로렌스 포스터 젠킨스 실제 사진 / 오른쪽: 영화에서의 모습 (메릴 스트립 주연)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3aZmD/dJMb990VQQ9/n0GnXz6Wp6y0TEe3bZmMlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3aZmD%2FdJMb990VQQ9%2Fn0GnXz6Wp6y0TEe3bZmMlk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;588&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왼쪽: 플로렌스 포스터 젠킨스 실제 사진 / 오른쪽: 영화에서의 모습 (메릴 스트립 주연)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%ED%94%8C%EB%A1%9C%EB%A0%8C%EC%8A%A4_%ED%8F%AC%EC%8A%A4%ED%84%B0_%EC%A0%B1%ED%82%A8%EC%8A%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;플로렌스 포스터 젠킨스&lt;/a&gt;(Florence Foster Jenkins; 1868&amp;ndash;1944)는 미국의 부유한 사교계 인사이자 &lt;u&gt;&lt;b&gt;아마추어 소프라노&lt;/b&gt;&lt;/u&gt;였습니다. 남편의 유산과 자신의 재산으로 음악 활동을 후원하며, 스스로를 뛰어난 성악가라고 믿었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어렸을 적에는 피아노에 재능이 있어 백악관에서도 연주할 정도였고, 음악 공부를 위해 유럽 유학을 가고 싶어 했으나 아버지의 반대로 좌절되었습니다. 첫번째 결혼생활도 순탄치 못해 의사인 남편에게서 매독을 옮아 이혼하였고, 막대한 유산을 바탕으로 성악가로 커리어를 옮길 결심을 하게 되었고 성악가가 꿈꾸던 모든 이상적인 커리어가 실제로 실현되기는 했습니다. 실력적인 부분만 제외하고 말이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성악가로 데뷔한 이후, 젠킨스는 단숨에 '세계 최악의 성악가'라는 별명을 획득하였습니다. 음정,&amp;nbsp;박자,&amp;nbsp;발음&amp;nbsp;등&amp;nbsp;성악가로서의&amp;nbsp;기본기가&amp;nbsp;거의&amp;nbsp;전무하다시피&amp;nbsp;했습니다.&amp;nbsp;그녀가&amp;nbsp;부른&amp;nbsp;모차르트의&amp;nbsp;'밤의&amp;nbsp;여왕&amp;nbsp;아리아'&amp;nbsp;같은&amp;nbsp;고난도&amp;nbsp;곡들은&amp;nbsp;그녀의&amp;nbsp;처참한&amp;nbsp;실력을&amp;nbsp;오히려&amp;nbsp;돋보이게&amp;nbsp;만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;그녀의 노래는 음정 불안정, 박자 이탈, 발성 문제 등으로 전문가들에게는 &amp;ldquo;최악&amp;rdquo;으로 평가받았지만, &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;강렬한 열정과 자신감으로 유명해졌습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;진실 공방:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;앞서 언급했듯이 피아노에 재능이 있었다는 기록이 있기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;그녀가 자신의 성악 실력을 정말 몰랐는지, 아니면 알고도 일부러 음치인 척하며 즐겼는지는 여전히 논쟁거리입니다. 매독 치료를 위해 사용한 수은과 비소의 부작용으로 청력이 손상되어 자신의 목소리를 제대로 듣지 못했을 가능성도 제기되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;젠킨스가 부른 밤의 여왕&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그녀가 남긴 녹음 중 가장 유명한 것이 바로 모차르트의 밤의 여왕 아리아입니다. 원곡의 화려한 기교가 완전히 무너지면서, 오히려 코미디 같은 효과를 냈습니다. 고음에서 음이 빗나가고, 콜로라투라가 엉망이 되는 부분이 &amp;ldquo;전설&amp;rdquo;이 되었습니다. 일부분에서는 고음의 음정이 실제 곡과 맞는 경우도 없지는 않지만, 전체적으로 리듬이나 음정이 엉망이었으며, 젠킨스가 리듬이나 박자를 실수하면 이를 무마하기 위해서 젠킨스를 따라 반주도 틀리게 연주하는 경우도 빈번했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 이러한 사례들은 전설로만 남겨지기 일쑤이나, 젠킨스는 매우 부유한 사교계 인사였기 때문에 음악계 인맥 또한 넓었고 최신 기술을 접할 재력이 있었습니다. 따라서 음악 녹음을 남길 재정적 여유가 있었던 젠킨스의 이 아리아는 &lt;u&gt;&lt;b&gt;실제로 음반으로 기록되었고&lt;/b&gt;&lt;/u&gt; 현재에도 유튜브나 음악 스트리밍 서비스에서 바로 들을 수 있습니다. 이 녹음을 실제로&amp;nbsp;들어보면 우리가 아는 전형적인 '심각한 음치'와 일치하는 것을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=V6ubiUIxbWE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Ajsva/dJMb9fZCp9k/bVmhhav8pXSe0errGKQkk1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360,https://scrap.kakaocdn.net/dn/L820k/dJMb8T96Od2/6VKCv8ECSa6LuxltVhSvNk/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360,https://scrap.kakaocdn.net/dn/b0KBus/dJMb8RRY4ei/ncgPid9Qou9KdqSDEoNA91/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot; data-video-width=&quot;480&quot; data-video-height=&quot;360&quot; data-video-origin-width=&quot;480&quot; data-video-origin-height=&quot;360&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Florence Foster Jenkins - Queen of the Night by Mozart.&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/V6ubiUIxbWE&quot; width=&quot;480&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;젠킨스 여사의 '밤의 여왕' (1941&amp;ndash;1944 녹음 추정)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;당시 사람들의 반응과 카네기 홀 공연&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1944년 10월 25일, 76세의 그녀는 &lt;b&gt;뉴욕 카네기 홀&lt;/b&gt;에서 단독 공연을 했습니다. 티켓은 2시간 만에 매진되었고, 2,000명 이상이 입장하지 못할 정도로 인기가 폭발했습니다. Cole Porter, Lily Pons 등 유명 인사들도 관람했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3009&quot; data-origin-height=&quot;2386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt6AH4/dJMcaftgqbe/Jem4EkzuuzkIDakSw1dujK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt6AH4/dJMcaftgqbe/Jem4EkzuuzkIDakSw1dujK/img.jpg&quot; data-alt=&quot;카네기 홀 공연&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt6AH4/dJMcaftgqbe/Jem4EkzuuzkIDakSw1dujK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt6AH4%2FdJMcaftgqbe%2FJem4EkzuuzkIDakSw1dujK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;515&quot; data-origin-width=&quot;3009&quot; data-origin-height=&quot;2386&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;카네기 홀 공연&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관객들은 웃음을 참지 못했지만, 젠킨스는 그 환호를 자신의 실력에 대한 찬사로 받아들였습니다. 공연 후 신문 평론이 혹평을 쏟아내자 충격을 받았습니다. 다만 세간에 알려진 것과 달리, 혹평으로 인해 직접적으로 사망하지는 않았으며, 카네기 홀 공연 5일 후에 음반 가게에서 쇼핑을 즐기다가 심장 발작으로 쓰러지고 그 후 한 달 만에 사망했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오늘날의 평가와 최근 자료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘날 젠킨스는 단순한 &amp;ldquo;못 부르는 사람&amp;rdquo;이 아니라, &lt;b&gt;음악을 진심으로 사랑한 열정의 아이콘&lt;/b&gt;으로 재평가받고 있습니다. &amp;ldquo;캠프(camp)&amp;rdquo; 문화의 선구자, 자신을 믿는 용기의 상징으로 보입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;캠프(Camp) 문화&lt;/b&gt;: 단순히 &amp;ldquo;촌스럽다&amp;rdquo;는 뜻이 아니라, 과장됨&amp;middot;인위적임&amp;middot;진지한 실패마저도 하나의 미학으로 즐기는 문화적 감수성을 의미합니다. 이 개념은 특히 Susan Sontag의 에세이 《Notes on Camp》를 통해 널리 알려졌습니다.&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영화같은 인생 스토리 덕분에 대중에게도 매우 널리 알려지게 되었고 실제로도 많은 매체화가 이루어졌습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2016년 영화&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;《Florence Foster Jenkins》(메릴 스트립 주연, 휴 그랜트 공연)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;2016년 독일 다큐드라마 《The Florence Foster Jenkins Story》(Joyce DiDonato 주연) &amp;mdash; 드라마와 다큐멘터리를 결합&lt;/li&gt;
&lt;li&gt;여러 책과 다큐멘터리(예: &lt;i&gt;Florence Foster Jenkins: A World of Their Own&lt;/i&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그녀의 이야기는 여전히 다큐, 책, 강연 소재로 활용되며, &amp;ldquo;완벽하지 않아도 꿈을 쫓는 삶&amp;rdquo;의 메시지를 전합니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=giI2uxwFRJg&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/7o2RL/dJMb8XScX37/ygAsj7yYWNq9yCsG8htGl1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=130_174_1124_420,https://scrap.kakaocdn.net/dn/NglRf/dJMb8XkmAsy/eKKLHbA577wgjWTTYOubF1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=130_174_1124_420,https://scrap.kakaocdn.net/dn/caC6r0/dJMb8ZvIBi7/n10GQvLaVN3bb0dJSsFTnk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=130_174_1124_420&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Meryl Streep as Florence Foster Jenkins - Queen of the Night aria (complete)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/giI2uxwFRJg&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;영화 Florence Foster Jenkins(2016)에서 재현된 카네기 홀 공연.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모차르트의 밤의 여왕 아리아는 최고의 기교를 요구하는 오페라 명곡입니다. 동시에 플로렌스 포스터 젠킨스라는 독특한 인물을 통해, 음악이 가진 또 다른 힘, 즉&amp;nbsp;&lt;b&gt;사랑과 열정&lt;/b&gt;을 보여주는 작품이 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 곡의 음악이 세계 최고의 성악가들에게는 도전의 상징이 되고, 아마추어에게는 꿈의 무대가 되며, 우리에게는 &amp;ldquo;완벽함이 아닌 진심&amp;rdquo;의 가치를 일깨워준다는 점에서, 이 아리아는 21세기에도 계속해서 빛날 것입니다. 음악은 결국, 누가 부르느냐에 따라 완전히 다른 이야기를 들려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;가사&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Der&amp;nbsp;H&amp;ouml;lle&amp;nbsp;Rache&amp;nbsp;kocht&amp;nbsp;in&amp;nbsp;meinem&amp;nbsp;Herzen,&lt;br /&gt;지옥의&amp;nbsp;복수심이&amp;nbsp;내&amp;nbsp;마음에&amp;nbsp;끓어오르고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tod&amp;nbsp;und&amp;nbsp;Verzweiflung&amp;nbsp;flammet&amp;nbsp;um&amp;nbsp;mich&amp;nbsp;her!&lt;br /&gt;죽음과&amp;nbsp;절망이&amp;nbsp;내&amp;nbsp;주위에&amp;nbsp;불타오르네!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F&amp;uuml;hlt nicht durch dich Sarastro Todesschmerzen,&lt;br /&gt;네가&amp;nbsp;자라스트로가&amp;nbsp;죽음의&amp;nbsp;고통을&amp;nbsp;느끼게&amp;nbsp;하지&amp;nbsp;않는다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;So bist du meine Tochter nimmermehr:&lt;br /&gt;그러면&amp;nbsp;너는&amp;nbsp;더&amp;nbsp;이상&amp;nbsp;나의&amp;nbsp;딸이&amp;nbsp;아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Versto&amp;szlig;en&amp;nbsp;sei&amp;nbsp;auf&amp;nbsp;ewig,&lt;br /&gt;영원히&amp;nbsp;의절하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Verlassen&amp;nbsp;sei&amp;nbsp;auf&amp;nbsp;ewig,&lt;br /&gt;영원히 저버리고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Zertr&amp;uuml;mmert&amp;nbsp;sei'n&amp;nbsp;auf&amp;nbsp;ewig&lt;br /&gt;영원히 부수리라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Alle&amp;nbsp;Bande&amp;nbsp;der&amp;nbsp;Natur.&lt;br /&gt;자연의&amp;nbsp;모든&amp;nbsp;인연을.&lt;br /&gt;&lt;br /&gt;Wenn&amp;nbsp;nicht&amp;nbsp;durch&amp;nbsp;dich&amp;nbsp;Sarastro&amp;nbsp;wird&amp;nbsp;erblassen!&lt;br /&gt;네가 자라스트로가 죽게 만들지 않는다면!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H&amp;ouml;rt, Racheg&amp;ouml;tter, h&amp;ouml;rt der Mutter Schwur!&lt;br /&gt;들어라,&amp;nbsp;복수의&amp;nbsp;신들이여,&amp;nbsp;들어라,&amp;nbsp;어미의&amp;nbsp;맹세를!&lt;/p&gt;</description>
      <category>클래식|윈드뮤직 등등/클래식</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/297</guid>
      <comments>https://infoarmory.tistory.com/297#entry297comment</comments>
      <pubDate>Mon, 1 Jun 2026 23:32:06 +0900</pubDate>
    </item>
    <item>
      <title>[SwiftUI] 목록(List)의 행(row) 및 헤더(header) 높이 변경 / 리스트 섹션 간 높이 간격 조절</title>
      <link>https://infoarmory.tistory.com/296</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;SwiftUI List에서 행(row)과 헤더(header) 높이를 변경하는 방법은 무엇일까요? 또 리스트의 섹션 간 높이 간격을 조절하는 방법은 무엇일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;행, 헤더 높이 변경 방법: .environment 수정자 이용&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;defaultMinListRowHeight&lt;/b&gt;&amp;nbsp;라는&amp;nbsp;&lt;b&gt;EnvironmentValue&lt;/b&gt;를&amp;nbsp;사용해서&amp;nbsp;기본&amp;nbsp;최소&amp;nbsp;행&amp;nbsp;높이를&amp;nbsp;설정할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;마찬가지로&amp;nbsp;&lt;b&gt;defaultMinListHeaderHeight&lt;/b&gt;를&amp;nbsp;사용하면&amp;nbsp;섹션&amp;nbsp;헤더의&amp;nbsp;높이를&amp;nbsp;지정할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;아래 코드는 그룹화된 리스트에서 슬라이더로 두 값을 조절하는 예시입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1780123182616&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// ...SwiftUI View에서 작성...

@State private var rowHeight: CGFloat = 40
@State private var headerHeight: CGFloat = 60

var body: some View {
  VStack {
    HStack {
      Text(&quot;Row height&quot;)
      Slider(value: $rowHeight, in: 40.0...80.0)
    }
    HStack {
      Text(&quot;Header height&quot;)
      Slider(value: $headerHeight, in: 60.0...80.0)
    }
    List(1..&amp;lt;5) { section in
      Section(&quot;Section \(section)&quot;) {
        ForEach(1..&amp;lt;3) { row in
          Text(&quot;Row \(row) of section \(section)&quot;)
        }
      }
    }
  }
  .padding()
  .environment(\.defaultMinListRowHeight, rowHeight) //   행 높이 지정
  .environment(\.defaultMinListHeaderHeight, headerHeight) //   헤더 높이 지정
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GXejk/dJMcahxQQL6/eNZznc5s5Kxi1dQdfUUPyk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GXejk/dJMcahxQQL6/eNZznc5s5Kxi1dQdfUUPyk/img.gif&quot; data-alt=&quot;결과 화면 GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GXejk/dJMcahxQQL6/eNZznc5s5Kxi1dQdfUUPyk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/GXejk/dJMcahxQQL6/eNZznc5s5Kxi1dQdfUUPyk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;226&quot; height=&quot;400&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과 화면 GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점은 최소값을 지정하는 것이기 때문에 높이를 강제할 수 없고 내용에 따라 늘어날 수 있다는 점입니다.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;리스트 섹션 간 간격 조절&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;iOS 17 이상&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1780123654558&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Section {
  ...
} header: {
  Text(&quot;Header&quot;)
}
.listSectionSpacing(10)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre id=&quot;code_1780123666880&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.listSectionSpacing(.compact)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;iOS 16 이하&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UICollectionView.appearance()&lt;/b&gt; 전역 설정 조정하여 높이를 조정할 수 있고, 이 방법은 iOS 16버전 이하에서도 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 단점으로는, 모든 List의 설정에 영향을 미치기 때문에 onDisappear 등으로도 원래 설정으로 완전히 되돌리는 방법은 없으므로 주의해서 사용해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1780123717411&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI

struct ContentView: View {
  init() {
    // 섹션간 높이 조절
    var layoutConfig = UICollectionLayoutListConfiguration(appearance: .plain) // 주의: 우선하여 적용됨
    layoutConfig.headerMode = .supplementary
    layoutConfig.headerTopPadding = 10
    let listLayout = UICollectionViewCompositionalLayout.list(using: layoutConfig)
    UICollectionView.appearance().collectionViewLayout = listLayout
  }

  ...
}

// 되돌리기 (의도되로 되지 않을 수 있음)

.onDisappear {
  let layoutConfig = UICollectionLayoutListConfiguration(appearance: .plain)
  let defaultLayout = UICollectionViewCompositionalLayout.list(using: layoutConfig)
  UICollectionView.appearance().collectionViewLayout = defaultLayout
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxQTFQ/dJMcabdgJv2/7sH0tO5ruOfMCiap1IArR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxQTFQ/dJMcabdgJv2/7sH0tO5ruOfMCiap1IArR1/img.png&quot; data-alt=&quot;간격 적용 전/후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxQTFQ/dJMcabdgJv2/7sH0tO5ruOfMCiap1IArR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxQTFQ%2FdJMcabdgJv2%2F7sH0tO5ruOfMCiap1IArR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;345&quot; height=&quot;176&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;간격 적용 전/후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Swift(프로그래밍 언어)</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/296</guid>
      <comments>https://infoarmory.tistory.com/296#entry296comment</comments>
      <pubDate>Sat, 30 May 2026 15:50:35 +0900</pubDate>
    </item>
    <item>
      <title>MuseScore 4: Palette(팔레트) 기능 가이드 및 악기별로 여러 조성, 여러 박자 적용하는 방법</title>
      <link>https://infoarmory.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MuseScore 4의 Palette 기능을 사용하면 자주 사용하는 음악 기호나 표현을 빠르게 입력할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;새로운 팔레트 추가하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Palettes 패널에서 마우스 오른쪽 버튼을 클릭한 후 &lt;b&gt;&quot;Insert New Palette&quot;&lt;/b&gt;를 선택하여 새 팔레트를 만들 수 있습니다. 생성된 팔레트에는 원하는 이름을 지정하여 용도별로 구분할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/assets/img/wp-content/uploads/2025/05/screenshot-2025-05-29-pm-2.43.29-copy.jpg&quot; alt=&quot;&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8Gt7/dJMcadB3Fc7/jSotvjXPFF8ngHYGRhKdb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8Gt7/dJMcadB3Fc7/jSotvjXPFF8ngHYGRhKdb1/img.jpg&quot; data-alt=&quot;새 팔레트 만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8Gt7/dJMcadB3Fc7/jSotvjXPFF8ngHYGRhKdb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8Gt7%2FdJMcadB3Fc7%2FjSotvjXPFF8ngHYGRhKdb1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;192&quot; height=&quot;236&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새 팔레트 만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;팔레트에 요소 추가하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팔레트에 요소를 추가하는 방법은 두 가지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;기본 요소 추가하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팔레트 상단의 &lt;b&gt;&quot;More&quot;&lt;/b&gt; 버튼을 클릭하면 다양한 음악 기호와 표현이 표시됩니다. 필요한 요소를 선택하여 팔레트 안으로 드래그하면 해당 요소가 팔레트에 추가됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhWGpU/dJMcafUiwBY/sLsK5RN2aJiSNJfk3hznZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhWGpU/dJMcafUiwBY/sLsK5RN2aJiSNJfk3hznZ0/img.jpg&quot; data-alt=&quot;More 버튼 눌러 기본 요소 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhWGpU/dJMcafUiwBY/sLsK5RN2aJiSNJfk3hznZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhWGpU%2FdJMcafUiwBY%2FsLsK5RN2aJiSNJfk3hznZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;336&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;More 버튼 눌러 기본 요소 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;!-- &lt;iframe width=&quot;293&quot; height=&quot;480&quot; src=&quot;https://giphy.com/embed/7OXxxSkjjRzjMwIUKW&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt; --&gt;
&lt;p&gt;&lt;img src=&quot;https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExM3dhcWZlbXZzZWo0NXlkbnVwczZrY2tmdHJ3eGh0OWttY3R2ajZmMyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/7OXxxSkjjRzjMwIUKW/giphy.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;커스텀 요소 추가하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;악보에 있는 요소를 팔레트에 추가하려면 해당 요소를 선택한 상태에서 &lt;b&gt;Command + Shift&lt;/b&gt; 키를 누른 채로 팔레트 안으로 드래그합니다. 이를 통해 특정 설정이 적용된 텍스트, 화성 표기, 음표 그룹 등을 팔레트에 저장할 수 있습니다.&lt;/p&gt;
&lt;!-- &lt;iframe width=&quot;480&quot; height=&quot;125&quot; src=&quot;https://giphy.com/embed/FwMIj2pQrvkwaGQQPb&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt; --&gt;
&lt;p&gt;&lt;img src=&quot;https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExcWs1NGZvbjZkazh0eXl4a2ZqZjQ4cHQyNDhpOW8wcjh0ODFjdThkeSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/FwMIj2pQrvkwaGQQPb/giphy.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;팔레트 단축키 설정하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MuseScore Studio &amp;gt; Preferences&lt;/b&gt;를 선택하거나 &lt;b&gt;Command + ,&lt;/b&gt; 단축키를 사용하여 환경설정 창을 엽니다. &lt;b&gt;Shortcuts&lt;/b&gt; 탭에서 검색창에 &quot;palette&quot;를 입력하면 팔레트 관련 기능을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T8MOt/dJMcabddXcZ/DjLNFuMpIqWFAIjloI8lu0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T8MOt/dJMcabddXcZ/DjLNFuMpIqWFAIjloI8lu0/img.jpg&quot; data-alt=&quot;팔레트 단축키 설정하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T8MOt/dJMcabddXcZ/DjLNFuMpIqWFAIjloI8lu0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT8MOt%2FdJMcabddXcZ%2FDjLNFuMpIqWFAIjloI8lu0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;869&quot; height=&quot;434&quot; data-origin-width=&quot;869&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;팔레트 단축키 설정하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;img src=&quot;/assets/img/wp-content/uploads/2025/05/screenshot-2025-05-29-pm-2.54.28-copy.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;주요 팔레트 단축키 기능&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Apply current palette element (현재 선택된 팔레트 요소를 악보에 적용)&lt;/b&gt; &lt;br /&gt;팔레트에서 선택된 요소를 악보의 현재 위치에 적용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Open master palette... (마스터 팔레트 창 열기)&lt;/b&gt; &lt;br /&gt;MuseScore의 모든 음악 기호와 표현이 정리된 마스터 팔레트 창을 엽니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Search palettes (팔레트 검색창으로 커서 이동)&lt;/b&gt; &lt;br /&gt;팔레트 검색 기능을 사용할 수 있도록 검색창으로 포커스를 이동시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Show/hide palettes (팔레트 패널 보이기/숨기기)&lt;/b&gt; &lt;br /&gt;팔레트 패널을 표시하거나 숨깁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;[응용] 한 악보에서 악기별로 여러 박자 또는 조성 적용하기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;여러 조성 적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Key Signatures 팔레트에서 조성을 적용할 때 모든 악기에 똑같은 조성을 적용하는 것이 아닌 일부 악기는 다른 조성을 적용하는 것이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;팔레트에서 &lt;b&gt;Key Signatures&lt;/b&gt;를 선택하거나 검색합니다.&lt;/li&gt;
&lt;li&gt;원하는 조 버튼을 클릭한 후, 맥에서 &lt;u&gt;&lt;b&gt;command&lt;/b&gt;&lt;/u&gt; 키를 누른 상태 (최신버전 4.7 이상) 또는 드래그 한 상태에서 &lt;u&gt;&lt;b&gt;command&lt;/b&gt;&lt;/u&gt;를 누른 뒤 (구버전) 원하는 악기 및 악보 위치로 드래그한 뒤 놓으면 해당 악기는 다른 조성이 적용됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 1.41.09(2) 복사본.jpg&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMdbg2/dJMcaayGQ9f/6PiipkakTcZ08hhkUT0D51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMdbg2/dJMcaayGQ9f/6PiipkakTcZ08hhkUT0D51/img.jpg&quot; data-alt=&quot;command가 눌려진 상태에서 원하는 위치로 조표를 드래그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMdbg2/dJMcaayGQ9f/6PiipkakTcZ08hhkUT0D51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMdbg2%2FdJMcaayGQ9f%2F6PiipkakTcZ08hhkUT0D51%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;285&quot; data-filename=&quot;스크린샷 2026-05-27 오전 1.41.09(2) 복사본.jpg&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;command가 눌려진 상태에서 원하는 위치로 조표를 드래그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.04.16.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk9OW4/dJMcajvA2uR/zJc00ODkGBvUFrDmfEossK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk9OW4/dJMcajvA2uR/zJc00ODkGBvUFrDmfEossK/img.png&quot; data-alt=&quot;사장조인 부분에서 일부 악기 (호른, 트럼펫) 만 Open 조성이 적용됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk9OW4/dJMcajvA2uR/zJc00ODkGBvUFrDmfEossK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk9OW4%2FdJMcajvA2uR%2FzJc00ODkGBvUFrDmfEossK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;537&quot; height=&quot;509&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.04.16.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사장조인 부분에서 일부 악기 (호른, 트럼펫) 만 Open 조성이 적용됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;일부분만 다른 박자 적용 (Local Time Signature) &lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;박자의 경우에도 Time Signatures 팔레트에서 박자를 적용할 때 모든 악기에 똑같은 박자를 적용하는 것이 아닌 일부 악기는 다른 박자를 적용하는 것이 가능합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;제한사항 (4.6 이하 버전, 일부 사항은 4.7에서 개선되었습니다.)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반복(단축키 r)을 할 수 없음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;4.7에서 개선되어 같은 Local Time에서는 반복 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;같은 Local Time에서 복사 및 붙여넣기를 할 수 없음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;4.7에서 개선되어 같은 Local Time인 경우에는 복붙 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다른 Time으로 복사 및 붙여넣기를 할 수 없음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 Local Time 박자가 아닌 다른 박자는 같은 숫자(예: 전체 박자의 4/4, 로컬 박자의 4/4)라도 복붙할 수 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 1.54.36.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vt5k9/dJMcahxNYIz/KHYxpwDGITXn5CaQDzI4l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vt5k9/dJMcahxNYIz/KHYxpwDGITXn5CaQDzI4l0/img.png&quot; data-alt=&quot;다른 박자표간 복사 및 붙여넣기 불가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vt5k9/dJMcahxNYIz/KHYxpwDGITXn5CaQDzI4l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVt5k9%2FdJMcahxNYIz%2FKHYxpwDGITXn5CaQDzI4l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475&quot; height=&quot;178&quot; data-filename=&quot;스크린샷 2026-05-27 오전 1.54.36.png&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다른 박자표간 복사 및 붙여넣기 불가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마디가 비어있어야만 추가할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.16.23.png&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VNY4U/dJMcaciTQoC/diuIS7bW1N1ldqZCfS4S8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VNY4U/dJMcaciTQoC/diuIS7bW1N1ldqZCfS4S8K/img.png&quot; data-alt=&quot;마디가 비어있어야만 추가할 수 있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VNY4U/dJMcaciTQoC/diuIS7bW1N1ldqZCfS4S8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVNY4U%2FdJMcaciTQoC%2FdiuIS7bW1N1ldqZCfS4S8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;358&quot; height=&quot;218&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.16.23.png&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마디가 비어있어야만 추가할 수 있음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;방법&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;팔레트에서 Time Signatures를 선택하거나 검색합니다.&lt;/li&gt;
&lt;li&gt;악보가 이미 있는 경우 변경을 할 수 없습니다. 악보를 삭제합니다.&lt;/li&gt;
&lt;li&gt;원하는 박자 버튼을 클릭한 후, 맥에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;command&lt;/b&gt;&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;키를 누른 상태 (최신버전 4.7 이상) 또는 드래그 한 상태에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;command&lt;/b&gt;&lt;/u&gt;를 누른 뒤 (구버전) 원하는 악기 및 악보 위치로 드래그한 뒤 놓으면 해당 악기는 다른 박자가 적용됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.18.00(2).png&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DgDVZ/dJMcaglkmTH/U1dtpjgOdSAKfOUfMZEHA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DgDVZ/dJMcaglkmTH/U1dtpjgOdSAKfOUfMZEHA1/img.png&quot; data-alt=&quot;command + 드래그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DgDVZ/dJMcaglkmTH/U1dtpjgOdSAKfOUfMZEHA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDgDVZ%2FdJMcaglkmTH%2FU1dtpjgOdSAKfOUfMZEHA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;419&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.18.00(2).png&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;command + 드래그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.18.19.png&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YuRZz/dJMcaciTQoB/bkpKDY2iLBYk4rP7RIZjFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YuRZz/dJMcaciTQoB/bkpKDY2iLBYk4rP7RIZjFk/img.png&quot; data-alt=&quot;12/8 박자표가 메인인 부분에서 일부 악기가 4/4 박자로 변경됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YuRZz/dJMcaciTQoB/bkpKDY2iLBYk4rP7RIZjFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYuRZz%2FdJMcaciTQoB%2FbkpKDY2iLBYk4rP7RIZjFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;213&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.18.19.png&quot; data-origin-width=&quot;172&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;12/8 박자표가 메인인 부분에서 일부 악기가 4/4 박자로 변경됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;취소하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마디 내용을 지우고, 원래 박자를 command + 드래그로 로컬 박자 추가하듯이 하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.22.36(2).png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y4Oax/dJMcaarVeHz/PDN4j2Cc50yBI8G4rJq7e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y4Oax/dJMcaarVeHz/PDN4j2Cc50yBI8G4rJq7e1/img.png&quot; data-alt=&quot;마디 내용을 지우고, command + 드래그로 원래 박자표를 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y4Oax/dJMcaarVeHz/PDN4j2Cc50yBI8G4rJq7e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy4Oax%2FdJMcaarVeHz%2FPDN4j2Cc50yBI8G4rJq7e1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;492&quot; height=&quot;214&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.22.36(2).png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마디 내용을 지우고, command + 드래그로 원래 박자표를 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.22.45.png&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0AVcD/dJMcadoxSo7/yD7dFgIpzzB6IQ6Kz6fcp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0AVcD/dJMcadoxSo7/yD7dFgIpzzB6IQ6Kz6fcp0/img.png&quot; data-alt=&quot;Local 박자표가 취소되고 원래대로 돌아옴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0AVcD/dJMcadoxSo7/yD7dFgIpzzB6IQ6Kz6fcp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0AVcD%2FdJMcadoxSo7%2FyD7dFgIpzzB6IQ6Kz6fcp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;181&quot; data-filename=&quot;스크린샷 2026-05-27 오전 2.22.45.png&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Local 박자표가 취소되고 원래대로 돌아옴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>공부/멀티미디어 제작</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/295</guid>
      <comments>https://infoarmory.tistory.com/295#entry295comment</comments>
      <pubDate>Wed, 27 May 2026 02:29:40 +0900</pubDate>
    </item>
    <item>
      <title>SR 래치 (Set/Reset Latch) [논리 순차회로]</title>
      <link>https://infoarmory.tistory.com/294</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SR 래치(Set/Reset Latch)는 가장 기본적인 메모리 회로 중 하나로, 입력 상태에 따라 1비트 값을 &amp;ldquo;기억&amp;rdquo;하는 회로입니다. 보통 디지털 논리 회로, 플립플롭, 레지스터 등의 기초가 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;래치/플립플롭은 전자공학에서 &lt;u&gt;1 비트의 정보를 보관, 유지&lt;/u&gt;할 수 있는 회로이며 순차 회로의 기본요소입니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;조합논리회로에 비해 래치/플립플롭은 이전상태를 계속 유지하여 저장합니다.&lt;span&gt; 일반 조합회로와 달리 데이터 상태를 저장할 수 있다는 것은 매우 구분되는 특징입니다. SR 래치는 하나당 1비트의 정보를 저장할 수 있으므로 8개의 SR 래치가 있다면 1바이트의 메모리가 될 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;latch&lt;/b&gt; 1. 걸쇠 2. 걸쇠를 걸다 3. 자물쇠&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;래치는 한 비트의 정보를 데이터가 바뀌기 전까지 계속 유지하는 회로입니다. 따라서 출력 Q을 0 또는 1로 토글하는 상태전이가 필요합니다. 래치 종류에 따라 입력은 한 개 또는 두 개를 사용합니다.&lt;/p&gt;
&lt;p id=&quot;mwQA&quot; style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;논리 회로 시스템 설계에서 경우에 따라 래치의 입력을 반영할 시점을 조절할 필요가 있습니다. 즉, 입력 신호가 들어와도 입력 시기를 조절하여 Q의 상태변화가 없도록 하는 제어 신호가 있고, 이것으로 입력을 무시하거나 또는 출력에 반영할 수 있습니다. 이때 사용하는 신호가 게이트(gate, 또는 enable)이다. 표시는 &lt;u&gt;&lt;b&gt;E&lt;/b&gt;&lt;/u&gt;(enable, E, EN, G 등으로 표시)로 하고, 입력신호와 별도의 제어 입력이 같이 있습니다. 이 신호가 존재하는 래치를 게이트-래치(gated latch)라고 합니다. E 신호가 없을 경우는 입력의 상태가 바로 반영됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-25 오후 11.09.22.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBuWT/dJMb997zQoZ/z1bIbsU5LcRvvs3ezbeww1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBuWT/dJMb997zQoZ/z1bIbsU5LcRvvs3ezbeww1/img.png&quot; data-alt=&quot;Enable 신호 여부 차이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBuWT/dJMb997zQoZ/z1bIbsU5LcRvvs3ezbeww1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBuWT%2FdJMb997zQoZ%2Fz1bIbsU5LcRvvs3ezbeww1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;318&quot; data-filename=&quot;스크린샷 2026-05-25 오후 11.09.22.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Enable 신호 여부 차이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SR 래치는 가장 간단한 순차회로입니다. 여기서 &lt;u&gt;S(set)는 출력 1을, R(reset)은 출력 0&lt;/u&gt;으로 되도록 한다는 의미입니다. NOR 논리 게이트를 교차 되먹임 입력(Cross Feedback)을 통해 만들어집니다. 저장된 현재 상태출력은 Q로 표시합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[참고] 래치와 플립플롭의 차이&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디지털 공학에서 입력을 출력에 반영하는 시점을 클럭 신호의 순간 엣지에서 반영하는 플립플롭과, 입력에 따라 항상 반영되는 래치로 구분됩니다. 래치는 입력되는 순간 바로 반영하기 때문에 플립플롭처럼 엣지의 시점을 결정하는 논리회로가 없어도 되므로 래치의 논리회로가 간단합니다. 플립플롭에서는 필요한 클럭 신호는 수정 발진기 등을 이용하여 생성하며 복잡한 회로는 많은 플립플롭이 같은 클럭신호를 사용하므로 전용의 클럭 배선이 필요한 경우도 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[참고] 조합회로와 순차회로의 차이&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조합회로: 입력 신호만으로 출력이 결정되는 회로입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 번 입력 신호가 결정되면 항상 같은 결과를 반환합니다.&lt;/li&gt;
&lt;li&gt;예: 기본 논리 게이트 (AND, OR 등), 가산기, 셀렉터, 멀티플렉서 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;순차회로: 이전&amp;nbsp;상태의&amp;nbsp;신호와&amp;nbsp;외부&amp;nbsp;입력&amp;nbsp;신호에&amp;nbsp;따라&amp;nbsp;출력이&amp;nbsp;결정되는&amp;nbsp;회로입니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전상태가 계속 유지되려면 출력을 입력에 반영하는 되먹임(feedback) 논리회로 구조를 갖습니다.&lt;/li&gt;
&lt;li&gt;예: 래치, 플립플롭, 카운터, 시퀀서 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SR 래치의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SR NOR Latch (E 신호 없음)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOR 게이트 2개로 만든 SR 래치입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIHX1n/dJMcagZTN5x/28bTuGWfDTuxS977DowAu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIHX1n/dJMcagZTN5x/28bTuGWfDTuxS977DowAu1/img.png&quot; data-alt=&quot;SR NOR Latch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIHX1n/dJMcagZTN5x/28bTuGWfDTuxS977DowAu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIHX1n%2FdJMcagZTN5x%2F28bTuGWfDTuxS977DowAu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;528&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SR NOR Latch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;구성&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;입력&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;S (Set)&lt;/b&gt;: S를&amp;nbsp;활성화하면&amp;nbsp;Q가&amp;nbsp;1로&amp;nbsp;설정(Set)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;R (Reset)&lt;/b&gt;: R을&amp;nbsp;활성화하면&amp;nbsp;Q가&amp;nbsp;0으로&amp;nbsp;리셋(Reset)&lt;/li&gt;
&lt;li&gt;둘 다 비활성 상태이면 이전 값을 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출력&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Q&lt;/b&gt;: 켜진 상태를 기준으로 한 경우 이 값을 사용 (일반적)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q' (Q의 반대값)&lt;/b&gt;: 꺼진 상태를 기준으로 한 경우 이 값을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOR 기반 SR 래치의 동작표는 다음과 같습니다. (순서대로 S, R, Q)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0, 0, 이전 상태 유지&lt;/li&gt;
&lt;li&gt;1, 0, Q = 1 (Set)&lt;/li&gt;
&lt;li&gt;0, 1, Q = 0 (Reset)&lt;/li&gt;
&lt;li&gt;1, 1, 금지 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력이 다시 상대 게이트 입력으로 연결되어 있기 때문에 이 상태는 기억될 수 있습니다. 즉,&amp;nbsp;현재 출력이 다음 출력 결정에 다시 영향 을 주는 &amp;ldquo;&lt;b&gt;피드백(feedback; 되먹임)&lt;/b&gt;&amp;rdquo; 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 Q=0 이라고 가정할 때, S=1 를 입력하면 Q가 1이 되고, 이후 S를 다시 0으로 내려도 서로 연결된 게이트가 현재 상태를 계속 유지 하게 됩니다. 아래 GIF 이미지에서 S버튼을 눌렀다 때면 1이 0이 되지만 전구(Q)는 계속 켜져 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SR NOR Latch May-26-2026 15-15-09.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccBb4W/dJMcabxxOOY/gBpFFpf9Z08OyBDGtHq8Ik/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccBb4W/dJMcabxxOOY/gBpFFpf9Z08OyBDGtHq8Ik/img.gif&quot; data-alt=&quot;SR NOR Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccBb4W/dJMcabxxOOY/gBpFFpf9Z08OyBDGtHq8Ik/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ccBb4W/dJMcabxxOOY/gBpFFpf9Z08OyBDGtHq8Ik/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;314&quot; height=&quot;294&quot; data-filename=&quot;SR NOR Latch May-26-2026 15-15-09.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SR NOR Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Gated SR NOR Latch (E 신호 있음)&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 신호를 대신하여 앞에 다음과 같은 회로를 추가하면 Enable 신호(E)가 추가된 SR NOR Latch 회로를 만들 수 있습니다. E가 추가된 SR 래치(Gated SR Latch)는 제어 신호 (E)를 통해 출력의 변경 타이밍을 조절할 수 있는 순서논리회로입니다. 기본 SR 래치는 입력이 바뀌면 즉시 출력이 변하지만, Gated SR 래치는 Enable 신호가 활성화(E=1)되어야만 S와 R의 입력에 따라 출력이 바뀝니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b96O1N/dJMcaf7LR95/X5xf7rYnkzJcBwsGwmvLV1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b96O1N/dJMcaf7LR95/X5xf7rYnkzJcBwsGwmvLV1/img.jpg&quot; data-alt=&quot;NAND를 이용한 제어용 게이트가 설치된 Gated SR NOR Latch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b96O1N/dJMcaf7LR95/X5xf7rYnkzJcBwsGwmvLV1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb96O1N%2FdJMcaf7LR95%2FX5xf7rYnkzJcBwsGwmvLV1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NAND를 이용한 제어용 게이트가 설치된 Gated SR NOR Latch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gated SR 래치는 기본 래치 앞에 입력 제어용 게이트를 추가하여 설계합니다. 제어용 게이트는 AND 또는 NAND를 사용합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvQCx/dJMcaicq1sr/6byJunZ0Za76bJNOQAFp7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvQCx/dJMcaicq1sr/6byJunZ0Za76bJNOQAFp7k/img.jpg&quot; data-alt=&quot;AND를 이용한 제어용 게이트가 설치된 Gated SR NOR Latch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvQCx/dJMcaicq1sr/6byJunZ0Za76bJNOQAFp7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvQCx%2FdJMcaicq1sr%2F6byJunZ0Za76bJNOQAFp7k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;620&quot; height=&quot;291&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AND를 이용한 제어용 게이트가 설치된 Gated SR NOR Latch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SR NOR Latch with EN May-26-2026 15-15-43.gif&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/seNH7/dJMcaccaFYZ/l63VAuP8dM7CjybAKlkbW1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/seNH7/dJMcaccaFYZ/l63VAuP8dM7CjybAKlkbW1/img.gif&quot; data-alt=&quot;Gated SR NOR Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/seNH7/dJMcaccaFYZ/l63VAuP8dM7CjybAKlkbW1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/seNH7/dJMcaccaFYZ/l63VAuP8dM7CjybAKlkbW1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;288&quot; data-filename=&quot;SR NOR Latch with EN May-26-2026 15-15-43.gif&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Gated SR NOR Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SR NAND Latch (E 신호 없음)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NAND 게이트로도 SR 래치를 만들 수 있는데, 이 경우 입력 논리가 반대로 동작합니다. 입력값을 SR NOR Latch와 정반대로 입력하면 결과값은 동일하게 출력됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPD1EW/dJMcagljuoG/9rVQaKkRkoiGcA3MrdnCu0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPD1EW/dJMcagljuoG/9rVQaKkRkoiGcA3MrdnCu0/img.webp&quot; data-alt=&quot;SR NAND Latch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPD1EW/dJMcagljuoG/9rVQaKkRkoiGcA3MrdnCu0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPD1EW%2FdJMcagljuoG%2F9rVQaKkRkoiGcA3MrdnCu0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;950&quot; height=&quot;332&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SR NAND Latch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SR NAND Latch May-26-2026 15-15-26.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BqdEy/dJMcajbcsvA/oVnwVmRM8C4vJYwcIT49ok/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BqdEy/dJMcajbcsvA/oVnwVmRM8C4vJYwcIT49ok/img.gif&quot; data-alt=&quot;SR NAND Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BqdEy/dJMcajbcsvA/oVnwVmRM8C4vJYwcIT49ok/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/BqdEy/dJMcajbcsvA/oVnwVmRM8C4vJYwcIT49ok/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;314&quot; height=&quot;294&quot; data-filename=&quot;SR NAND Latch May-26-2026 15-15-26.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SR NAND Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Gated&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;SR NAND Latch (E 신호 있음)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게이트 부분을 아래와 같이 NAND로 구성하면 게이트 부분에서 한 번 반전이 되기 때문에 최종 결과는 NOR 래치와 동일하게 됩니다. 즉, 입력값을 반전시킬 필요가 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBM5HC/dJMb997AmW2/iX8ABVwKlDatT8kOATLuak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBM5HC/dJMb997AmW2/iX8ABVwKlDatT8kOATLuak/img.png&quot; data-alt=&quot;Gated SR NAND Latch&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBM5HC/dJMb997AmW2/iX8ABVwKlDatT8kOATLuak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBM5HC%2FdJMb997AmW2%2FiX8ABVwKlDatT8kOATLuak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;731&quot; height=&quot;267&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;731&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Gated SR NAND Latch&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SR NAND Latch with ENMay-26-2026 15-16-01.gif&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTIxpa/dJMcajbcsx6/0Bk9AA2eqG7hKE7EhmTIek/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTIxpa/dJMcajbcsx6/0Bk9AA2eqG7hKE7EhmTIek/img.gif&quot; data-alt=&quot;Gated SR NAND Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTIxpa/dJMcajbcsx6/0Bk9AA2eqG7hKE7EhmTIek/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bTIxpa/dJMcajbcsx6/0Bk9AA2eqG7hKE7EhmTIek/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;250&quot; data-filename=&quot;SR NAND Latch with ENMay-26-2026 15-16-01.gif&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Gated SR NAND Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SR 래치의 문제점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SR 래치의 문제점은 양쪽 모두 입력 신호가 가해졌을 때의 금지 상태입니다. 이를 race condition 또는 metastable 상태라고 부릅니다. SR NOR Latch에서 S=1, R=1을 동시에 넣으면 (또는 SR NAND Latch에서 그 반대의 경우)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 출력이 동시에 0이 되려 하고&lt;/li&gt;
&lt;li&gt;이후 어느 쪽이 먼저 변하느냐에 따라 상태가 불안정해질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;SR Latch Race Condition.gif&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WTJ9o/dJMcahEvVaC/MMn1ak2a7DBNhiNjj1hRU0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WTJ9o/dJMcahEvVaC/MMn1ak2a7DBNhiNjj1hRU0/img.gif&quot; data-alt=&quot;SR Latch Race Condition GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WTJ9o/dJMcahEvVaC/MMn1ak2a7DBNhiNjj1hRU0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/WTJ9o/dJMcahEvVaC/MMn1ak2a7DBNhiNjj1hRU0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;332&quot; data-filename=&quot;SR Latch Race Condition.gif&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SR Latch Race Condition GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 보완하기 위해 SR 래치보다 다음 순차 회로들이 자주 쓰입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;D 래치: Enable이 활성화된 동안 입력 D 값을 그대로 저장하는 래치&lt;/li&gt;
&lt;li&gt;JK 플립플롭: SR 플립플롭의 금지 상태를 없애고 J=K=1일 때 출력이 토글되는 플립플롭&lt;/li&gt;
&lt;li&gt;T 플립플롭: 입력이&amp;nbsp;활성화될&amp;nbsp;때마다&amp;nbsp;출력이&amp;nbsp;0&amp;harr;1로&amp;nbsp;반전되는&amp;nbsp;플립플롭&lt;/li&gt;
&lt;li&gt;엣지 트리거 D 플립플롭: 클럭의 상승/하강 순간(edge)에서만 입력을 저장하는 플립플롭&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KPeQx/dJMcac4h6Jb/zEFGjoZT76oGBodF1yymJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KPeQx/dJMcac4h6Jb/zEFGjoZT76oGBodF1yymJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KPeQx/dJMcac4h6Jb/zEFGjoZT76oGBodF1yymJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKPeQx%2FdJMcac4h6Jb%2FzEFGjoZT76oGBodF1yymJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1000&quot; height=&quot;579&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[실습] NAND IC 칩(HD74LS00P)으로 SR NAND Latch, Gated SR NAND Latch 구현&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1779778459575&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;브레드보드 실습: IC 칩 사용하기 (NAND 게이트 HD74LS00P)&quot; data-og-description=&quot;집적회로(IC: Integrated Circuit)는 트랜지스터, 저항, 콘덴서 등 수많은 전자 부품을 얇은 실리콘 기판 위에 미세하게 설계하고 연결하여 하나의 칩으로 만든 핵심 부품입니다. 흔히 '반도체 칩' 또는&quot; data-og-host=&quot;infoarmory.tistory.com&quot; data-og-source-url=&quot;https://infoarmory.tistory.com/280&quot; data-og-url=&quot;https://infoarmory.tistory.com/280&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dhccf7/dJMb8WeF8FV/kAPvHFMIdHmB9fZqHXkrnk/img.png?width=800&amp;amp;height=376&amp;amp;face=0_0_800_376,https://scrap.kakaocdn.net/dn/w0PgZ/dJMb9jgDFoM/ZKnhYeAXWxAT4VjxLc118K/img.png?width=800&amp;amp;height=376&amp;amp;face=0_0_800_376,https://scrap.kakaocdn.net/dn/cUjYRH/dJMb9kmiZwc/yYkVHdh2vv9a0keQG3ZVq0/img.png?width=1209&amp;amp;height=536&amp;amp;face=0_0_1209_536&quot;&gt;&lt;a href=&quot;https://infoarmory.tistory.com/280&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://infoarmory.tistory.com/280&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dhccf7/dJMb8WeF8FV/kAPvHFMIdHmB9fZqHXkrnk/img.png?width=800&amp;amp;height=376&amp;amp;face=0_0_800_376,https://scrap.kakaocdn.net/dn/w0PgZ/dJMb9jgDFoM/ZKnhYeAXWxAT4VjxLc118K/img.png?width=800&amp;amp;height=376&amp;amp;face=0_0_800_376,https://scrap.kakaocdn.net/dn/cUjYRH/dJMb9kmiZwc/yYkVHdh2vv9a0keQG3ZVq0/img.png?width=1209&amp;amp;height=536&amp;amp;face=0_0_1209_536');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;브레드보드 실습: IC 칩 사용하기 (NAND 게이트 HD74LS00P)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;집적회로(IC: Integrated Circuit)는 트랜지스터, 저항, 콘덴서 등 수많은 전자 부품을 얇은 실리콘 기판 위에 미세하게 설계하고 연결하여 하나의 칩으로 만든 핵심 부품입니다. 흔히 '반도체 칩' 또는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;infoarmory.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SR NAND Latch (E 없음)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-26 오후 4.43.38.png&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lt26F/dJMcabj4SEv/bUkUZAsqjwRofXmDA3D4Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lt26F/dJMcabj4SEv/bUkUZAsqjwRofXmDA3D4Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lt26F/dJMcabj4SEv/bUkUZAsqjwRofXmDA3D4Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLt26F%2FdJMcabj4SEv%2FbUkUZAsqjwRofXmDA3D4Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;870&quot; height=&quot;417&quot; data-filename=&quot;스크린샷 2026-05-26 오후 4.43.38.png&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번(1B)을 6번(2Y), 3번(1Y)를 4번(2A)에 연결하는 것과, 입력이 반대로 되어있는 것을 주의해야 합니다. (버튼의 왼쪽 방향을 (+) 풀업 저항과 연결하고 오른쪽을 (-)에 연결)&lt;/p&gt;
&lt;div style=&quot;color: #ffffff; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NXswo/dJMb997AswU/5Y1OR0i7aUOkWSw0W9FK91/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NXswo/dJMb997AswU/5Y1OR0i7aUOkWSw0W9FK91/img.gif&quot; data-alt=&quot;NAND IC칩을 이용한 SR NAND Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NXswo/dJMb997AswU/5Y1OR0i7aUOkWSw0W9FK91/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/NXswo/dJMb997AswU/5Y1OR0i7aUOkWSw0W9FK91/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;270&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NAND IC칩을 이용한 SR NAND Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Gated SR NAND Latch (E 있음)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13번(4B)와 10번(3B)를 연결 후, 12번(4A)를 S, 9번을(3A)를 R 스위치에 연결합니다. 11번 4Y를 1A에 연결하고, 8번 3Y를 2B에 연결합니다. Gated SR NAND Latch를 이전 섹션에서 소개했던 회로도대로 연결하는 경우 입력값을 반전시킬 필요가 없습니다. (버튼의 왼쪽 방향을 (-) 풀업 저항과 연결하고 오른쪽을 (+)에 연결)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6stwz/dJMcacwuXob/w5Q0M8ZKLvHcauWdVJjSIk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6stwz/dJMcacwuXob/w5Q0M8ZKLvHcauWdVJjSIk/img.gif&quot; data-alt=&quot;NAND IC칩을 이용한 Gated SR NAND Latch GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6stwz/dJMcacwuXob/w5Q0M8ZKLvHcauWdVJjSIk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/6stwz/dJMcacwuXob/w5Q0M8ZKLvHcauWdVJjSIk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;264&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NAND IC칩을 이용한 Gated SR NAND Latch GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;color: #ffffff; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/전산|프로그래밍</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/294</guid>
      <comments>https://infoarmory.tistory.com/294#entry294comment</comments>
      <pubDate>Tue, 26 May 2026 17:39:11 +0900</pubDate>
    </item>
    <item>
      <title>Embedded Swift: 그림 및 텍스트가 스크롤되는 도트 매트릭스 전광판 만들기</title>
      <link>https://infoarmory.tistory.com/292</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESP32-C6 + idf.py + Embedded Swift 6.2 &lt;/b&gt;를 이용해 마이크로컨트롤러에서 시프트 레지스터를 사용하는 32&amp;times;8 도트 매트릭스로 그림이 스크롤되는 전광판 구현하기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot; data-sfc-root=&quot;c&quot; data-hveid=&quot;CAIQAA&quot; data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-copy-service-computed-style=&quot;font-family: Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 12px 0px 16px; text-decoration: none; border-bottom: 0px rgb(10, 10, 10);&quot;&gt;&lt;a style=&quot;background-color: #e6f5ff; text-align: left;&quot; href=&quot;https://infoarmory.tistory.com/tag/EmbeddedSwift&quot;&gt;Embedded Swift 시리즈 목록&lt;/a&gt;&amp;nbsp;(분량상 모든 내용을 다 설명할 수 없어 생략한 부분이 있으니 일부 내용은 이전 글들을 참고해주세요.)&lt;br /&gt;이전글: &lt;a href=&quot;https://infoarmory.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Embedded Swift에서 도트 매트릭스 사용 방법 기초&lt;/a&gt; 보기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 개의 &lt;b&gt;32&amp;times;8 도트 이미지&lt;/b&gt;를 하나의 매우 긴 가상 도트매트릭스로 연결한 뒤, 4개의 MAX7219 모듈 위에서 &lt;b&gt;비트 단위로 좌측 스크롤&lt;/b&gt;하는 예제입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_4420.jpg&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMna0K/dJMcacQFfnM/suI54gYn5K3spbUkSxttG1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMna0K/dJMcacQFfnM/suI54gYn5K3spbUkSxttG1/img.jpg&quot; data-alt=&quot;스크롤 화면. 동작 GIF는 포스트 하단에 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMna0K/dJMcacQFfnM/suI54gYn5K3spbUkSxttG1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMna0K%2FdJMcacQFfnM%2FsuI54gYn5K3spbUkSxttG1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;878&quot; height=&quot;321&quot; data-filename=&quot;IMG_4420.jpg&quot; data-origin-width=&quot;878&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스크롤 화면. 동작 GIF는 포스트 하단에 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;코드 보기&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1779026563216&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static func scroll() {
  dm.reset()
  let pin = GPIOPin(pinNumber: 11, mode: .inputOnly(.pullDownOnly))
  
  // https://dotmatrixtool.com/ 에서 그리고 배열의 값을 복사해서 붙여넣기
  // 32px by 8px, row major, big endian.
  let arrays: [[UInt8]] = [
    [
      0x85, 0xf4, 0x10, 0x3c, 0xc5, 0x04, 0x10, 0x42, 0xa5, 0x04, 0x10, 0x40,
      0x95, 0xe4, 0x90, 0x4e, 0x8d, 0x05, 0x50, 0x42, 0x85, 0x06, 0x30, 0x42,
      0x85, 0xf4, 0x10, 0x3c, 0x00, 0x00, 0x00, 0x00,
    ],
    [
      0x31, 0x05, 0xf0, 0x00, 0x49, 0x8d, 0x00, 0x00, 0x85, 0x55, 0x00, 0x00,
      0x85, 0x25, 0xe0, 0x00, 0xfd, 0x05, 0x00, 0x00, 0x85, 0x05, 0x00, 0x00,
      0x85, 0x05, 0xf2, 0xa0, 0x00, 0x00, 0x00, 0x00,
    ],
    [
      0x48, 0x51, 0xe3, 0x80, 0xfe, 0xf8, 0x00, 0x00, 0x48, 0x23, 0xf7, 0xc0,
      0x5c, 0x50, 0x11, 0x00, 0xc8, 0xf8, 0x11, 0x00, 0x5c, 0x20, 0x61, 0x00,
      0xea, 0xa9, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00,
    ],
    [
      0xe9, 0xf7, 0x2a, 0x22, 0x28, 0x42, 0x6a, 0xfa, 0x2d, 0xb5, 0x2e, 0x22,
      0x28, 0x44, 0x2a, 0x5b, 0x01, 0xf1, 0x8e, 0x82, 0xf8, 0xe2, 0x40, 0x32,
      0x09, 0x12, 0x44, 0x48, 0x08, 0xe1, 0x9f, 0x30,
    ],
    [
      0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
      0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
      0x10, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00,
    ],
  ]
 
  // 위의 2차원 배열을 행끼리 모아서 1차원 배열로 합침
  var merged: [UInt8] = []

  for row in 0..&amp;lt;8 {
    for array in arrays {
      let start = row * 4
      merged += Array(array[start..&amp;lt;(start + 4)])
    }
  }
  let totalChips = merged.count / 8

  // 반복 함수, t는 정해진 시간(1초)마다 1씩 증가
  loop { t in
    if pin.read() == 1 {
      dm.turnOffLED()
      return
    }

    for row in 0..&amp;lt;8 {
      // Chip Select 1 사이클: dm.cs.low -&amp;gt; dm.cs.high
      dm.csCycle {
        for i in 0..&amp;lt;4 {
          let chipIndex = (i + t / 8) % totalChips

          let value = merged[(row * totalChips) + chipIndex]
          let source = merged[(row * totalChips) + ((chipIndex + 1) % totalChips)]
          let shiftedValue = shiftAppend(to: value, from: source, bitCount: t)

          dm.sendByte(UInt8(row + 1))
          dm.sendByte(shiftedValue)
        }
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체 흐름 요약&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;[그림1][그림2][그림3][그림4][그림5]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 여러 이미지를 하나의 긴 띠처럼 이어 붙인 뒤, &lt;b&gt;한 비트씩 왼쪽으로&lt;/b&gt; 밀어가는 방식입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.16.59.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G9ms6/dJMcaget7Vm/jWNMnDez5akiOiy27IULVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G9ms6/dJMcaget7Vm/jWNMnDez5akiOiy27IULVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G9ms6/dJMcaget7Vm/jWNMnDez5akiOiy27IULVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG9ms6%2FdJMcaget7Vm%2FjWNMnDez5akiOiy27IULVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;444&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.16.59.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림은 &lt;a href=&quot;https://dotmatrixtool.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dotmatrixtool.com/&lt;/a&gt;&amp;nbsp;에서 그릴 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;여러 개의 32&amp;times;8 이미지를 준비&lt;/li&gt;
&lt;li&gt;행(row) 단위로 긴&lt;span&gt;&amp;nbsp;&lt;/span&gt;merged&lt;span&gt;&amp;nbsp;&lt;/span&gt;배열로 병합&lt;/li&gt;
&lt;li&gt;현재 스크롤 위치&lt;span&gt;&amp;nbsp;&lt;/span&gt;t에 따라 표시할 구간 계산&lt;/li&gt;
&lt;li&gt;현재 칩 + 다음 칩 데이터 가져오기&lt;/li&gt;
&lt;li&gt;비트 시프트 + 이어붙이기 (shiftAppend)&lt;/li&gt;
&lt;li&gt;4개의 MAX7219에 출력&lt;/li&gt;
&lt;li&gt;t&lt;span&gt;&amp;nbsp;&lt;/span&gt;증가 후 반복&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결과적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;24칩(예시) 규모의 거대한 가상 화면&lt;/b&gt;을 만들고, 그중에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실제 4칩 부분만 잘라서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실시간으로 보여주는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;배열 준비&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let arrays: [[UInt8]] = [...]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기에 여러 개의 32&amp;times;8 이미지가 들어갑니다.&lt;/li&gt;
&lt;li&gt;각 이미지는 row-major 방식으로 저장되어 있으며, 한 이미지는 8행 &amp;times; 4바이트(32바이트)로 구성됩니다. (각 MAX7219 칩이 1바이트를 담당)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://dotmatrixtool.com/&quot;&gt;https://dotmatrixtool.com/&lt;/a&gt;&amp;nbsp; 에서 &lt;u&gt;32px by 8px, row major, &lt;b&gt;big endian&lt;/b&gt;. &lt;/u&gt;형식으로 그린 뒤 배열을 복사합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그림 한 개당 내부 배열 1개를 차지합니다.&lt;/li&gt;
&lt;li&gt;그림 5개를 그리면 5개의 행 배열과 각 행 배열 당 32개의 원소가 있어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;메모리 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 이미지의 내부 구조는 다음과 같습니다.&lt;/p&gt;
&lt;pre class=&quot;markdown&quot;&gt;&lt;code&gt;row0: [chip0][chip1][chip2][chip3]
row1: [chip0][chip1][chip2][chip3]
...
row7: [chip0][chip1][chip2][chip3]&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt; row * 4 + chipIndex&lt;/b&gt;&lt;/u&gt; 형태로 원하는 바이트에 접근할 수 있습니다.&lt;/li&gt;
&lt;li&gt;각 그림의 행끼리 모아놓는 것이 중요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnPUIk/dJMcabqIYRS/i1UV6gO5S9wZ2oTV8JC33K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnPUIk/dJMcabqIYRS/i1UV6gO5S9wZ2oTV8JC33K/img.png&quot; data-alt=&quot;각 행끼리 데이터를 모아야 합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnPUIk/dJMcabqIYRS/i1UV6gO5S9wZ2oTV8JC33K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnPUIk%2FdJMcabqIYRS%2Fi1UV6gO5S9wZ2oTV8JC33K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;200&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 행끼리 데이터를 모아야 합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;merged 배열 만들기&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;var merged: [UInt8] = []
for row in 0..&amp;lt;8 {
    for array in arrays {
        let start = row * 4
        merged += Array(array[start..&amp;lt;(start + 4)])
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순히 flatMap으로 이어붙이지 않고&lt;b&gt;&lt;u&gt; 행(row) 단위로 옆으로 붙입&lt;/u&gt;&lt;/b&gt;니다.&lt;/li&gt;
&lt;li&gt;실제로 MAX7219에 데이터를 출력할 때 &lt;b&gt;for row in 0..&amp;lt;8&lt;/b&gt; 루프로 &lt;u&gt;행 단위로 보내기 때문&lt;/u&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;start&lt;/b&gt;: 1차원 배열에서 행 데이터가 새로 시작되는 위치입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;start 에서 그 옆의 4개 데이터 (UInt8 숫자 네 개로 4바이트=32비트에 해당)를 merged에서도 같은 행끼리 만나도록 추가합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm2s79/dJMcaja6hUN/21AfAt57hORXHKRcaPGBKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm2s79/dJMcaja6hUN/21AfAt57hORXHKRcaPGBKk/img.png&quot; data-alt=&quot;각 start의 위치 = 각 행의 시작 위치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm2s79/dJMcaja6hUN/21AfAt57hORXHKRcaPGBKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm2s79%2FdJMcaja6hUN%2F21AfAt57hORXHKRcaPGBKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;114&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;114&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 start의 위치 = 각 행의 시작 위치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;병합 후 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 그림이 6개라면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 행당 &lt;b&gt;4칩 &amp;times; 5개 = 20칩&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;totalChips = 20&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 &lt;code&gt;merged&lt;/code&gt; 배열은 아래처럼 됩니다:&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;row0: [g0c0][g0c1][g0c2][g0c3][g1c0]...[g4c3]
row1: [g0c0][g0c1]...
...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.48.23.png&quot; data-origin-width=&quot;1976&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKQ6Yc/dJMcad24iKi/31IkmkbqBxcZaSlEUoW5W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKQ6Yc/dJMcad24iKi/31IkmkbqBxcZaSlEUoW5W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKQ6Yc/dJMcad24iKi/31IkmkbqBxcZaSlEUoW5W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKQ6Yc%2FdJMcad24iKi%2F31IkmkbqBxcZaSlEUoW5W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1976&quot; height=&quot;796&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.48.23.png&quot; data-origin-width=&quot;1976&quot; data-origin-height=&quot;796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;totalChips 계산&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;nix&quot;&gt;&lt;code&gt;let totalChips = merged.count / 8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;merged&lt;/code&gt;는 8행 &amp;times; 전체 칩 수로 구성되어 있으므로, 8로 나누면 가로로 이어진 총 칩 개수가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스크롤 루프 (t 값)&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;loop { t in ... }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;t&lt;/code&gt;는 스크롤 진행 정도를 나타내는 값으로, 0, 1, 2, 3... 계속 증가합니다. 즉 &lt;b&gt;몇 비트만큼 이동했는가&lt;/b&gt;를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;loop 보기 (더보기 클릭)&lt;/b&gt;&lt;/h4&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1779027925510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func loop(
  delay ms: UInt32 = 100, maxTCount: Int = 0, handler: ((_ t: Int) -&amp;gt; Void)
) {
  var t = 0
  while true {
    if (maxTCount &amp;gt; 0 &amp;amp;&amp;amp; t &amp;gt;= maxTCount) || t == .max {
      t = 0
      continue
    }

    handler(t)

    t += 1

    delay(ms: ms)
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;현재 표시할 칩 계산&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let chipIndex = (i + t / 8) % totalChips&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;i&lt;/code&gt;: 실제 물리적인 MAX7219 위치 (0~3)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;t / 8&lt;/code&gt;: 8비트(1바이트)가 지나면 다음 칩으로 넘어감&lt;/li&gt;
&lt;li&gt;&lt;code&gt;% totalChips&lt;/code&gt;: 끝까지 가면 다시 처음으로 돌아오는 무한 루프&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;출력할 데이터 가져오기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;let value = merged[(row * totalChips) + chipIndex]          // 현재 칩
let source = merged[(row * totalChips) + ((chipIndex + 1) % totalChips)] // 다음 칩&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;value: 현재 위치의 도트 바이트 값입니다.&lt;/li&gt;
&lt;li&gt;source: 다음 위치의 도트 바이트 값입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;왜 두 개의 바이트가 필요한가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비트 단위 스크롤&lt;/b&gt;을 하기 위해서입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 현재 바이트가 &lt;code&gt;10110000&lt;/code&gt;이고 왼쪽으로 1비트 이동하면 &lt;code&gt;0110000?&lt;/code&gt;가 됩니다.&lt;br /&gt;&lt;code&gt;?&lt;/code&gt; 자리에 &lt;b&gt;다음 칩의 MSB(최상위 비트)&lt;/b&gt;를 넣어줘야 이미지가 자연스럽게 이어집니다. (구현 방법은 shiftAppend 함수 이용, 밑에서 설명)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.55.45.png&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMIhEm/dJMcagFAiMR/3gYmDDyKzRM6ypt2nST9ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMIhEm/dJMcagFAiMR/3gYmDDyKzRM6ypt2nST9ck/img.png&quot; data-alt=&quot;value에서 가장 왼쪽 비트를 버리고, source의 왼쪽 비트를 가져옴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMIhEm/dJMcagFAiMR/3gYmDDyKzRM6ypt2nST9ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMIhEm%2FdJMcagFAiMR%2F3gYmDDyKzRM6ypt2nST9ck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;390&quot; data-filename=&quot;스크린샷 2026-05-17 오후 11.55.45.png&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;value에서 가장 왼쪽 비트를 버리고, source의 왼쪽 비트를 가져옴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;shiftAppend 함수&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;shiftAppend(to: value, from: source, bitCount: t)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 바이트를 &lt;code&gt;t&lt;/code&gt;만큼 시프트하고, 다음 바이트의 상위 비트를 적절히 붙여주는 함수입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;shiftAppend&amp;nbsp; 코드 보기&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1779029407916&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// rhs 의 상위 비트를 시프트한 후 lhs에 붙임, 0b10110000, 0b11110000 이라는 숫자가 있을 때 bitCount = 3인 경우 10000111 이 됨.
func shiftAppend(to lhs: UInt8, from rhs: UInt8, bitCount move: Int = 1)
  -&amp;gt; UInt8
{
  let move = move % 8
  let upper = rhs &amp;gt;&amp;gt; (8 - move)
  return (lhs &amp;lt;&amp;lt; move) | upper
}

func chunkArray32&amp;lt;T: Collection&amp;gt;(_ array: T) -&amp;gt; [[T.Element]]
where T.Index == Int {
  stride(from: 0, to: array.count, by: 32).map {
    Array(array[$0..&amp;lt;min($0 + 32, array.count)])
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MAX7219로 전송&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;for row in 0..&amp;lt;8 {
  // Chip Select 1 사이클: dm.cs.low -&amp;gt; dm.cs.high
  dm.csCycle {
    for i in 0..&amp;lt;4 {
      // ... //

      dm.sendByte(UInt8(row + 1))
      dm.sendByte(shiftedValue)
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MAX7219는 &lt;u&gt;&lt;b&gt;(레지스터 주소, 데이터)&lt;/b&gt;&lt;/u&gt; 형식으로 보내는데, &lt;b&gt;row + 1&lt;/b&gt;이 행 주소가 됩니다. 즉, 1부터 시작합니다.&lt;/li&gt;
&lt;li&gt;dm.csCycle은 칩 1개에 데이터를 전송하는 사이클이며 low에서 high로 변했을 때(펄스) 다음 칩으로 옮겨가게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779030019498&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Embedded Swift: 핀(GPIO Pin) 제어하기 (3) - 도트 전광판 제어 (MAX7219 32x8 도트 매트릭스 LED 5핀제어)&quot; data-og-description=&quot;ESP32-C6 + idf.py + Embedded Swift 6.2 를 이용해 마이크로컨트롤러에서 시프트 레지스터를 사용하는 도트 매트릭스와 연결해 제어하는 방법에 대해 알아보겠습니다.Embedded Swift 시리즈 목록 (분량상 모&quot; data-og-host=&quot;infoarmory.tistory.com&quot; data-og-source-url=&quot;https://infoarmory.tistory.com/288&quot; data-og-url=&quot;https://infoarmory.tistory.com/288&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfyNHB/dJMb887d90R/Qff1bXdKXdPd2fVtqLz3L1/img.png?width=800&amp;amp;height=243&amp;amp;face=0_0_800_243,https://scrap.kakaocdn.net/dn/rSGVB/dJMb83kyjSp/wZErl2eLdunk6dWuWpKWyK/img.png?width=800&amp;amp;height=243&amp;amp;face=0_0_800_243,https://scrap.kakaocdn.net/dn/ctN0KR/dJMb8WeE369/D9Edcn9KRsKjK059EGihck/img.png?width=1460&amp;amp;height=806&amp;amp;face=0_0_1460_806&quot;&gt;&lt;a href=&quot;https://infoarmory.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://infoarmory.tistory.com/288&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfyNHB/dJMb887d90R/Qff1bXdKXdPd2fVtqLz3L1/img.png?width=800&amp;amp;height=243&amp;amp;face=0_0_800_243,https://scrap.kakaocdn.net/dn/rSGVB/dJMb83kyjSp/wZErl2eLdunk6dWuWpKWyK/img.png?width=800&amp;amp;height=243&amp;amp;face=0_0_800_243,https://scrap.kakaocdn.net/dn/ctN0KR/dJMb8WeE369/D9Edcn9KRsKjK059EGihck/img.png?width=1460&amp;amp;height=806&amp;amp;face=0_0_1460_806');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Embedded Swift: 핀(GPIO Pin) 제어하기 (3) - 도트 전광판 제어 (MAX7219 32x8 도트 매트릭스 LED 5핀제어)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ESP32-C6 + idf.py + Embedded Swift 6.2 를 이용해 마이크로컨트롤러에서 시프트 레지스터를 사용하는 도트 매트릭스와 연결해 제어하는 방법에 대해 알아보겠습니다.Embedded Swift 시리즈 목록 (분량상 모&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;infoarmory.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;dm.csCycle 코드 보기 (더보기 클릭)&lt;/b&gt;&lt;/h4&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1779030106980&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct DotMatrixManager {
  let cs: GPIOPin
  let din: GPIOPin
  let clk: GPIOPin

  func reset() {
    // 초기화
    send(register: 0x0C, data: 0x01)  // shutdown off
    send(register: 0x0F, data: 0x00)  // test off
    send(register: 0x0B, data: 0x07)  // scan limit
    send(register: 0x09, data: 0x00)  // decode off
    send(register: 0x0A, data: 0x03)  // intensity 낮게

    turnOffLED()
  }

  func turnOffLED() {
    // 모든 LED 끄기
    for row in 1...8 {
      send(register: UInt8(row), data: 0x00)
    }
  }

  func sendBit(_ bit: Bool) {
    din.set(bit)
    clk.pulse()
  }

  func sendByte(_ byte: UInt8) {
    for i in (0..&amp;lt;8).reversed() {
      let bit = (byte &amp;gt;&amp;gt; i) &amp;amp; 0x01
      din.set(bit == 1)
      clk.pulse()
    }
  }

  func send(register: UInt8, data: UInt8) {
    cs.low()
    for _ in 0..&amp;lt;4 {
      sendByte(register)
      sendByte(data)
    }
    cs.high()
  }

  //   csCycle
  func csCycle(handler: () -&amp;gt; Void) {
    cs.low()
    handler()
    cs.high()
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;동작 화면&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어 연결 방법은 &lt;a href=&quot;https://infoarmory.tistory.com/288%20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전 글의 ESP32-C6에 핀 역할 설정 및 하드웨어에 핀 연결&lt;/a&gt; 섹션을 참고하세요.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scroll 함수를 플래시(&lt;u&gt;&lt;b&gt;idf.py build flash monitor&lt;/b&gt;&lt;/u&gt;)하면 다음과 같이 스크롤되는 화면이 뜹니다.&lt;/p&gt;
&lt;div style=&quot;color: #ffffff; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rvKj7/dJMcaarODBV/QaSu7UmxZjUPrpAvAOyAPK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rvKj7/dJMcaarODBV/QaSu7UmxZjUPrpAvAOyAPK/img.gif&quot; data-alt=&quot;스크롤 화면 GIF&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rvKj7/dJMcaarODBV/QaSu7UmxZjUPrpAvAOyAPK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/rvKj7/dJMcaarODBV/QaSu7UmxZjUPrpAvAOyAPK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;204&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스크롤 화면 GIF&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #d8d8d8;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;응용하기 -&amp;nbsp; 텍스트 입력해서 전광판에&lt;span&gt;&amp;nbsp;&lt;/span&gt;스크롤하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹사이트를 통해 그림을 일일히 그리지 않고도 텍스트를 입력하면 자동으로 흐르도록 설정할 수 있습니다. 이에 대한 구체적인 설명은 다음 포스트에 올리겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1779030640859&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let textMatrix: [UInt8] = generateTextMatrix(&quot;  $\&quot;\u{11}\u{12}\u{13}\u{14}The quick brown fox jumps over the lazy dog\&quot;is an English-language pangram &amp;amp;&quot;)
let totalChips = textMatrix.count / 8
// 이후 과정 동일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;텍스트 입력해서 전광판에 스크롤하는 코드 보기 (gist)&lt;/b&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1779030660849&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Embedded Swift: 도트매트릭스 텍스트 스크롤&quot; data-og-description=&quot;Embedded Swift: 도트매트릭스 텍스트 스크롤. GitHub Gist: instantly share code, notes, and snippets.&quot; data-og-host=&quot;gist.github.com&quot; data-og-source-url=&quot;https://gist.github.com/ayaysir/aeee769ce1c26c1d16d7e390ccadb24b&quot; data-og-url=&quot;https://gist.github.com/ayaysir/aeee769ce1c26c1d16d7e390ccadb24b&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BFj76/dJMb82MIs0o/n0dXFoIxWSF3SstW0ZdYZK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/EAIwG/dJMb83Soiq8/qfCgTSY0EJGmnE9LSMDdF1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://gist.github.com/ayaysir/aeee769ce1c26c1d16d7e390ccadb24b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gist.github.com/ayaysir/aeee769ce1c26c1d16d7e390ccadb24b&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BFj76/dJMb82MIs0o/n0dXFoIxWSF3SstW0ZdYZK/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/EAIwG/dJMb83Soiq8/qfCgTSY0EJGmnE9LSMDdF1/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Embedded Swift: 도트매트릭스 텍스트 스크롤&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Embedded Swift: 도트매트릭스 텍스트 스크롤. GitHub Gist: instantly share code, notes, and snippets.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gist.github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Swift(프로그래밍 언어)</category>
      <category>EmbeddedSwift</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/292</guid>
      <comments>https://infoarmory.tistory.com/292#entry292comment</comments>
      <pubDate>Mon, 18 May 2026 00:18:05 +0900</pubDate>
    </item>
    <item>
      <title>MuseScore 4: Implode로 두 개의 Staff 악보를 하나로 합치기</title>
      <link>https://infoarmory.tistory.com/293</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MuseScore 4 에서 Implode 기능은 두 Staff를 합치는 기능입니다. 예를 들어, 호른 1&amp;amp;2, 3&amp;amp;4에 있는 악보를 하나로 합치면 트롬본 1 악보가 될 때, 재작성보다는 합쳐서 붙이는 게 더 빠른 경우 이 기능을 사용할 수 있습니다. 하단 악보를 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot;&gt;생각보다 편리하고 자주 쓰이는 기능으로, 여러 상황에서 응용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rHvg0/dJMcacJT6MM/T3hv3GmxWTofb6XAG1y6hK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rHvg0/dJMcacJT6MM/T3hv3GmxWTofb6XAG1y6hK/img.jpg&quot; data-alt=&quot;호른 파트 두 개의 악보를&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rHvg0/dJMcacJT6MM/T3hv3GmxWTofb6XAG1y6hK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrHvg0%2FdJMcacJT6MM%2FT3hv3GmxWTofb6XAG1y6hK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;345&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호른 파트 두 개의 악보를&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;53&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpRu33/dJMcaarLQWC/apoUlkwR59hok2kkrP6k20/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpRu33/dJMcaarLQWC/apoUlkwR59hok2kkrP6k20/img.jpg&quot; data-alt=&quot;위와 같이 합쳐서 트롬본 1로 붙여넣는 방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpRu33/dJMcaarLQWC/apoUlkwR59hok2kkrP6k20/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpRu33%2FdJMcaarLQWC%2FapoUlkwR59hok2kkrP6k20%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;557&quot; height=&quot;90&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;53&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위와 같이 합쳐서 트롬본 1로 붙여넣는 방법&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 개의 Staff로 분리된&lt;span&gt;&amp;nbsp;&lt;/span&gt;F. Horn 1 &amp;amp; 2,&lt;span&gt;&amp;nbsp;&lt;/span&gt;F. Horn. 3 &amp;amp; 4의 악보를&lt;span&gt;&amp;nbsp;&lt;/span&gt;Trombone 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;악보에 합쳐서
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 보이스(Voice)로 이루어진 Trombone 1 악보처럼 만들거나&lt;/li&gt;
&lt;li&gt;다른 보이스 1, 2 로 관리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Voice가 다르면 악보 모양 자체가 달라지고, 두 성부의 리듬이 같은 경우에는 같은 보이스로 관리하는 것이 편리합니다.&lt;/li&gt;
&lt;li&gt;Implode&lt;span&gt;&amp;nbsp;&lt;/span&gt;기능과 특별한 선택 두 기능을 사용해서 호른 두 파트를 아래 Trombone 1 처럼 합칠 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;implode&lt;/b&gt;의 뜻: 자체적으로 파열되다, 폭파하여 안쪽으로 붕괴하다; (문화 따위가) 한 점에 집중하다, 통합되다&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;전제조건&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;전제조건&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 보이스에서 관리할 것이라면 두 파트에서 선택한 범위의 리듬이 동일해야 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보이스를 분리해서 관리한다면 동일하지 않아도 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;참조&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;참조&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Implode의 반대인 &lt;b&gt;Explode&lt;/b&gt; 기능도 있습니다. Explode(폭발하다, 폭발시키다) 기능은 보이스나 화음으로 합쳐져 있는 스태프 악보를 파트별로 분배시키는 역할을 합니다. Explode 기능은 매우 직관적이므로 별도의 설명은 생략합니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #0056b2;&quot; href=&quot;https://musescore.org/en/handbook/4/implode-and-explode&quot;&gt;MuseScore 공식 매뉴얼: Implode and explode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;방법&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Implode를 실행하면 두 보이스로 악보가 합쳐집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보이스를 따로 관리하는 경우 1번 과정 후 종료합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;보이스 2의 악보를 보이스 1로 변경합니다.&lt;/li&gt;
&lt;li&gt;보이스 2의 잔존 요소(쉼표 등)들을 제거합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;1-implode-시키기&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;(1) implode 시키기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 파트에 걸친 범위를 선택 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;implode를 실행하면 별도의 보이스로 악보가 합쳐지게 됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;F Horn 1 &amp;amp; 2에서 복사할 영역을 선택한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;Trombone 1에 붙여넣기합니다.&lt;/li&gt;
&lt;li&gt;Implode는 연속된 Staff에서 실행할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;F Horn 3 &amp;amp; 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 악보를 임시로 사용하기 위해 1번과 동일한 영역을 선택한 뒤 바로 밑 Staff인&lt;span&gt;&amp;nbsp;&lt;/span&gt;Trombone 3에 복사 붙여넣기합니다.&lt;/li&gt;
&lt;li&gt;합칠 두 파트를 선택한 뒤 상단 메뉴&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;Tools &amp;gt; Implode&lt;/u&gt;를 클릭합니다.&lt;/li&gt;
&lt;li&gt;상단 부분(Trombone 1)은 파란색(Voice 1)로, 하단 부분(Trombone 3)은 초록색(Voice 2)로 합쳐졌습니다. Trombone 3에 임시로 붙여넣은 악보는 삭제합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;과정-스크린샷-보기&quot; style=&quot;background-color: #ffffff; color: #2a2a2a; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;과정 스크린샷 보기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wQPqV/dJMcaiXBxJK/8aSyJZEFaV19njn6Bpctz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wQPqV/dJMcaiXBxJK/8aSyJZEFaV19njn6Bpctz1/img.jpg&quot; data-alt=&quot;1 &amp;amp;ndash; 윗부분 복사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wQPqV/dJMcaiXBxJK/8aSyJZEFaV19njn6Bpctz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwQPqV%2FdJMcaiXBxJK%2F8aSyJZEFaV19njn6Bpctz1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;335&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1 &amp;ndash; 윗부분 복사&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VjtEW/dJMcadWjNi8/CAZAt7vknMUg7jnkPW8yE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VjtEW/dJMcadWjNi8/CAZAt7vknMUg7jnkPW8yE1/img.jpg&quot; data-alt=&quot;2 &amp;amp;ndash; 아랫부분 복사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VjtEW/dJMcadWjNi8/CAZAt7vknMUg7jnkPW8yE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVjtEW%2FdJMcadWjNi8%2FCAZAt7vknMUg7jnkPW8yE1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;348&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2 &amp;ndash; 아랫부분 복사&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8YdG/dJMcabEei6U/kbloh00qziBMPkDHYmJHfk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8YdG/dJMcabEei6U/kbloh00qziBMPkDHYmJHfk/img.jpg&quot; data-alt=&quot;3 &amp;amp;ndash; Implode 메뉴 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8YdG/dJMcabEei6U/kbloh00qziBMPkDHYmJHfk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8YdG%2FdJMcabEei6U%2Fkbloh00qziBMPkDHYmJHfk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;379&quot; height=&quot;395&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3 &amp;ndash; Implode 메뉴 선택&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p style=&quot;background-color: #ffffff; color: #34343c; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csFp1P/dJMcagldGWJ/jPi22vPzLqJgBkQaA7m9B0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csFp1P/dJMcagldGWJ/jPi22vPzLqJgBkQaA7m9B0/img.jpg&quot; data-alt=&quot;4 &amp;amp;ndash; Voice 2개로 합쳐짐,&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csFp1P/dJMcagldGWJ/jPi22vPzLqJgBkQaA7m9B0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsFp1P%2FdJMcagldGWJ%2FjPi22vPzLqJgBkQaA7m9B0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;357&quot; data-origin-width=&quot;625&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4 &amp;ndash; Voice 2개로 합쳐짐,&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;2-voice-2-초록색을-voice-1로-변환&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;(2) Voice 2 (초록색)을 Voice 1로 변환&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 보이스로 합치는 것을 원하기 때문에 보이스 2를 보이스 1로 변환합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;최초에는 두 보이스 모두 선택된 상태입니다. 여기서 보이스 2만 선택합니다. 범위가 선택된 상태에서 Trombone 1의 합쳐진 부분의&lt;span&gt;&amp;nbsp;&lt;/span&gt;초록색(Voice 2 선택색상)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;아무 노트를 선택한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;마우스 오른쪽 버튼 &amp;gt; Select &amp;gt; More...&lt;/u&gt;를 클릭합니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Same voice&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;체크박스를 클릭한 뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;OK&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 누릅니다.&lt;/li&gt;
&lt;li&gt;보이스 1은 선택 해제되고 보이스 2(초록색)만 선택된 상태가 됩니다.&lt;/li&gt;
&lt;li&gt;이 상태에서 상단 툴바의&lt;span&gt;&amp;nbsp;&lt;/span&gt;Voice 1 버튼을 누릅니다. 이 버튼을 누르면 보이스 2가 1로 변경됩니다.&lt;/li&gt;
&lt;li&gt;파란색으로 변경되면 보이스 1로 변환된 것입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;과정-스크린샷-보기-1&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;과정 스크린샷 보기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ID0H4/dJMcag6BE7s/BxQMwjKkwlR2E6KnMaXn9K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ID0H4/dJMcag6BE7s/BxQMwjKkwlR2E6KnMaXn9K/img.jpg&quot; data-alt=&quot;1 &amp;amp;ndash; More 선택 옵션 메뉴 열기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ID0H4/dJMcag6BE7s/BxQMwjKkwlR2E6KnMaXn9K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FID0H4%2FdJMcag6BE7s%2FBxQMwjKkwlR2E6KnMaXn9K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;241&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1 &amp;ndash; More 선택 옵션 메뉴 열기&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zdXX3/dJMcacDaAHt/VfJ5ekiExzVvdzLaCrv0Vk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zdXX3/dJMcacDaAHt/VfJ5ekiExzVvdzLaCrv0Vk/img.jpg&quot; data-alt=&quot;2 &amp;amp;ndash; Same Voice 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zdXX3/dJMcacDaAHt/VfJ5ekiExzVvdzLaCrv0Vk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzdXX3%2FdJMcacDaAHt%2FVfJ5ekiExzVvdzLaCrv0Vk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;309&quot; height=&quot;370&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2 &amp;ndash; Same Voice 선택&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMGVbi/dJMcab5ivL0/C1BXiKcoGSA4Lh2j2FH47k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMGVbi/dJMcab5ivL0/C1BXiKcoGSA4Lh2j2FH47k/img.jpg&quot; data-alt=&quot;3 &amp;amp;ndash; Voice 2만 선택됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMGVbi/dJMcab5ivL0/C1BXiKcoGSA4Lh2j2FH47k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMGVbi%2FdJMcab5ivL0%2FC1BXiKcoGSA4Lh2j2FH47k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;101&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3 &amp;ndash; Voice 2만 선택됨&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MTSAc/dJMcacwopMk/k1LMv6EQoAaGhW3mKiatRK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MTSAc/dJMcacwopMk/k1LMv6EQoAaGhW3mKiatRK/img.jpg&quot; data-alt=&quot;4 &amp;amp;ndash; Voice 1로 전환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MTSAc/dJMcacwopMk/k1LMv6EQoAaGhW3mKiatRK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMTSAc%2FdJMcacwopMk%2Fk1LMv6EQoAaGhW3mKiatRK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;191&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4 &amp;ndash; Voice 1로 전환&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vIptw/dJMcacXqMhK/VWM6cxtDUTbNkhYJellt21/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vIptw/dJMcacXqMhK/VWM6cxtDUTbNkhYJellt21/img.jpg&quot; data-alt=&quot;5 &amp;amp;ndash; Voice 1로 합쳐짐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vIptw/dJMcacXqMhK/VWM6cxtDUTbNkhYJellt21/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvIptw%2FdJMcacXqMhK%2FVWM6cxtDUTbNkhYJellt21%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;494&quot; height=&quot;181&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;5 &amp;ndash; Voice 1로 합쳐짐&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;3-voice-2의-모든-쉼표-삭제&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;(3) Voice 2의 모든 쉼표 삭제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2)번 작업을 마치면 보이스 2의 쉼표가 남아있게 됩니다. 보이스 2에 아무것도 없어야 하므로 지워야 합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;범위를 선택하고 초록색(Voice 2 선택색상)의&lt;span&gt;&amp;nbsp;&lt;/span&gt;아무 쉼표(rest)를&lt;span&gt;&amp;nbsp;&lt;/span&gt;선택한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;마우스 오른쪽 버튼 &amp;gt; Select &amp;gt; More...&lt;/u&gt;를 클릭합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;Same voice&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;체크박스를 클릭한 뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;OK&lt;span&gt;&amp;nbsp;&lt;/span&gt;버튼을 누릅니다.&lt;/li&gt;
&lt;li&gt;보이스 2(초록색)의 쉼표만 선택된 상태가 됩니다. 키보드의&lt;span&gt;&amp;nbsp;&lt;/span&gt;백스페이스(또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;Del) 키를 눌러 선택된 쉼표를 삭제합니다.&lt;/li&gt;
&lt;li&gt;보이스 2의 모든 요소가 제거되었습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;과정-스크린샷-보기-2&quot; style=&quot;color: #2a2a2a;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;과정 스크린샷 보기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/snp8D/dJMcahkbMDl/HBi59FDdWSKTHwq0ofr7c0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/snp8D/dJMcahkbMDl/HBi59FDdWSKTHwq0ofr7c0/img.jpg&quot; data-alt=&quot;1 &amp;amp;ndash; More 선택 옵션 열기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/snp8D/dJMcahkbMDl/HBi59FDdWSKTHwq0ofr7c0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsnp8D%2FdJMcahkbMDl%2FHBi59FDdWSKTHwq0ofr7c0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;277&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1 &amp;ndash; More 선택 옵션 열기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c48WQI/dJMcag6BE9c/NWvzeNTs9EbLKZeK4RA1ok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c48WQI/dJMcag6BE9c/NWvzeNTs9EbLKZeK4RA1ok/img.jpg&quot; data-alt=&quot;2 &amp;amp;ndash; Voice 2(초록색)만 선택된 상태에서 백스페이스 키 눌러서 지우기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c48WQI/dJMcag6BE9c/NWvzeNTs9EbLKZeK4RA1ok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc48WQI%2FdJMcag6BE9c%2FNWvzeNTs9EbLKZeK4RA1ok%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;107&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2 &amp;ndash; Voice 2(초록색)만 선택된 상태에서 백스페이스 키 눌러서 지우기&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7a6iD/dJMcaickd3F/EF6o75WqwNsbna1Oa60Gzk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7a6iD/dJMcaickd3F/EF6o75WqwNsbna1Oa60Gzk/img.jpg&quot; data-alt=&quot;3 &amp;amp;ndash; Voice 2 제거되었는지 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7a6iD/dJMcaickd3F/EF6o75WqwNsbna1Oa60Gzk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7a6iD%2FdJMcaickd3F%2FEF6o75WqwNsbna1Oa60Gzk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;93&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3 &amp;ndash; Voice 2 제거되었는지 확인&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #757575; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>공부/멀티미디어 제작</category>
      <author>정보조으미</author>
      <guid isPermaLink="true">https://infoarmory.tistory.com/293</guid>
      <comments>https://infoarmory.tistory.com/293#entry293comment</comments>
      <pubDate>Sun, 17 May 2026 02:10:24 +0900</pubDate>
    </item>
  </channel>
</rss>